@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.
- package/lib/cjs/grouping-mapping-widget.d.ts +11 -5
- package/lib/cjs/grouping-mapping-widget.js +21 -3
- package/lib/cjs/grouping-mapping-widget.js.map +1 -1
- package/lib/cjs/test/GroupingMappingCustomUI.test.js +49 -86
- package/lib/cjs/test/GroupingMappingCustomUI.test.js.map +1 -1
- package/lib/cjs/test/test-utils.d.ts +0 -6
- package/lib/cjs/test/test-utils.js +8 -24
- package/lib/cjs/test/test-utils.js.map +1 -1
- package/lib/cjs/widget/components/ActionPanel.d.ts +1 -1
- package/lib/cjs/widget/components/ActionPanel.js +1 -1
- package/lib/cjs/widget/components/ActionPanel.js.map +1 -1
- package/lib/cjs/widget/components/ConfirmMappingsImport.js +1 -4
- package/lib/cjs/widget/components/ConfirmMappingsImport.js.map +1 -1
- package/lib/cjs/widget/components/GroupAction.d.ts +13 -9
- package/lib/cjs/widget/components/GroupAction.js +56 -58
- package/lib/cjs/widget/components/GroupAction.js.map +1 -1
- package/lib/cjs/widget/components/GroupPropertyAction.d.ts +1 -1
- package/lib/cjs/widget/components/GroupPropertyAction.js.map +1 -1
- package/lib/cjs/widget/components/GroupPropertyUtils.js +4 -0
- package/lib/cjs/widget/components/GroupPropertyUtils.js.map +1 -1
- package/lib/cjs/widget/components/Grouping.d.ts +8 -9
- package/lib/cjs/widget/components/Grouping.js +118 -273
- package/lib/cjs/widget/components/Grouping.js.map +1 -1
- package/lib/cjs/widget/components/Grouping.scss +2 -2
- package/lib/cjs/widget/components/GroupingMapping.d.ts +28 -21
- package/lib/cjs/widget/components/GroupingMapping.js +59 -38
- package/lib/cjs/widget/components/GroupingMapping.js.map +1 -1
- package/lib/cjs/widget/components/GroupingMappingContent.d.ts +8 -0
- package/lib/cjs/widget/components/GroupingMappingContent.js +47 -0
- package/lib/cjs/widget/components/GroupingMappingContent.js.map +1 -0
- package/lib/cjs/widget/components/GroupingMappingContext.d.ts +31 -0
- package/lib/cjs/widget/components/GroupingMappingContext.js +84 -0
- package/lib/cjs/widget/components/GroupingMappingContext.js.map +1 -0
- package/lib/cjs/widget/components/GroupingMappingHeader.d.ts +8 -0
- package/lib/cjs/widget/components/GroupingMappingHeader.js +17 -0
- package/lib/cjs/widget/components/GroupingMappingHeader.js.map +1 -0
- package/lib/cjs/widget/components/GroupingMappingRouter.d.ts +8 -0
- package/lib/cjs/widget/components/GroupingMappingRouter.js +87 -0
- package/lib/cjs/widget/components/GroupingMappingRouter.js.map +1 -0
- package/lib/cjs/widget/components/Mapping.d.ts +7 -2
- package/lib/cjs/widget/components/Mapping.js +53 -84
- package/lib/cjs/widget/components/Mapping.js.map +1 -1
- package/lib/cjs/widget/components/MappingAction.d.ts +9 -5
- package/lib/cjs/widget/components/MappingAction.js +19 -8
- package/lib/cjs/widget/components/MappingAction.js.map +1 -1
- package/lib/cjs/widget/components/QueryBuilder.js +2 -7
- package/lib/cjs/widget/components/QueryBuilder.js.map +1 -1
- package/lib/cjs/widget/components/context/GroupHilitedElementsContext.d.ts +15 -0
- package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js +45 -0
- package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js.map +1 -0
- package/lib/cjs/widget/components/context/GroupingApiConfigContext.d.ts +1 -0
- package/lib/cjs/widget/components/context/GroupingApiConfigContext.js +1 -0
- package/lib/cjs/widget/components/context/GroupingApiConfigContext.js.map +1 -1
- package/lib/cjs/widget/components/context/GroupingMappingCustomUIContext.d.ts +6 -2
- package/lib/cjs/widget/components/context/GroupingMappingCustomUIContext.js +5 -5
- package/lib/cjs/widget/components/context/GroupingMappingCustomUIContext.js.map +1 -1
- package/lib/cjs/widget/components/customUI/DefaultGroupingUI.d.ts +3 -0
- package/lib/cjs/widget/components/customUI/DefaultGroupingUI.js +40 -0
- package/lib/cjs/widget/components/customUI/DefaultGroupingUI.js.map +1 -0
- package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.d.ts +5 -0
- package/lib/cjs/widget/components/{GroupQueryBuilderContainer.js → customUI/GroupQueryBuilderCustomUI.js} +36 -16
- package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -0
- package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.d.ts +3 -2
- package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -1
- package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.d.ts +1 -2
- package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js +2 -1
- package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
- package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.d.ts +1 -2
- package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.js +2 -1
- package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.js.map +1 -1
- package/lib/cjs/widget/components/groupsHelpers.d.ts +7 -0
- package/lib/cjs/widget/components/groupsHelpers.js +84 -0
- package/lib/cjs/widget/components/groupsHelpers.js.map +1 -0
- package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.d.ts +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js.map +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyView.js +29 -15
- package/lib/cjs/widget/components/property-grid/PropertyView.js.map +1 -1
- package/lib/cjs/widget/components/utils.d.ts +1 -3
- package/lib/cjs/widget/components/utils.js +1 -26
- package/lib/cjs/widget/components/utils.js.map +1 -1
- package/lib/esm/grouping-mapping-widget.d.ts +11 -5
- package/lib/esm/grouping-mapping-widget.js +9 -2
- package/lib/esm/grouping-mapping-widget.js.map +1 -1
- package/lib/esm/test/GroupingMappingCustomUI.test.js +46 -83
- package/lib/esm/test/GroupingMappingCustomUI.test.js.map +1 -1
- package/lib/esm/test/test-utils.d.ts +0 -6
- package/lib/esm/test/test-utils.js +7 -22
- package/lib/esm/test/test-utils.js.map +1 -1
- package/lib/esm/widget/components/ActionPanel.d.ts +1 -1
- package/lib/esm/widget/components/ActionPanel.js +1 -1
- package/lib/esm/widget/components/ActionPanel.js.map +1 -1
- package/lib/esm/widget/components/ConfirmMappingsImport.js +1 -4
- package/lib/esm/widget/components/ConfirmMappingsImport.js.map +1 -1
- package/lib/esm/widget/components/GroupAction.d.ts +13 -9
- package/lib/esm/widget/components/GroupAction.js +57 -61
- package/lib/esm/widget/components/GroupAction.js.map +1 -1
- package/lib/esm/widget/components/GroupPropertyAction.d.ts +1 -1
- package/lib/esm/widget/components/GroupPropertyAction.js.map +1 -1
- package/lib/esm/widget/components/GroupPropertyUtils.js +4 -0
- package/lib/esm/widget/components/GroupPropertyUtils.js.map +1 -1
- package/lib/esm/widget/components/Grouping.d.ts +8 -9
- package/lib/esm/widget/components/Grouping.js +122 -277
- package/lib/esm/widget/components/Grouping.js.map +1 -1
- package/lib/esm/widget/components/Grouping.scss +2 -2
- package/lib/esm/widget/components/GroupingMapping.d.ts +28 -21
- package/lib/esm/widget/components/GroupingMapping.js +59 -39
- package/lib/esm/widget/components/GroupingMapping.js.map +1 -1
- package/lib/esm/widget/components/GroupingMappingContent.d.ts +8 -0
- package/lib/esm/widget/components/GroupingMappingContent.js +24 -0
- package/lib/esm/widget/components/GroupingMappingContent.js.map +1 -0
- package/lib/esm/widget/components/GroupingMappingContext.d.ts +31 -0
- package/lib/esm/widget/components/GroupingMappingContext.js +61 -0
- package/lib/esm/widget/components/GroupingMappingContext.js.map +1 -0
- package/lib/esm/widget/components/GroupingMappingHeader.d.ts +8 -0
- package/lib/esm/widget/components/GroupingMappingHeader.js +10 -0
- package/lib/esm/widget/components/GroupingMappingHeader.js.map +1 -0
- package/lib/esm/widget/components/GroupingMappingRouter.d.ts +8 -0
- package/lib/esm/widget/components/GroupingMappingRouter.js +80 -0
- package/lib/esm/widget/components/GroupingMappingRouter.js.map +1 -0
- package/lib/esm/widget/components/Mapping.d.ts +7 -2
- package/lib/esm/widget/components/Mapping.js +55 -86
- package/lib/esm/widget/components/Mapping.js.map +1 -1
- package/lib/esm/widget/components/MappingAction.d.ts +9 -5
- package/lib/esm/widget/components/MappingAction.js +18 -9
- package/lib/esm/widget/components/MappingAction.js.map +1 -1
- package/lib/esm/widget/components/QueryBuilder.js +2 -7
- package/lib/esm/widget/components/QueryBuilder.js.map +1 -1
- package/lib/esm/widget/components/context/GroupHilitedElementsContext.d.ts +15 -0
- package/lib/esm/widget/components/context/GroupHilitedElementsContext.js +22 -0
- package/lib/esm/widget/components/context/GroupHilitedElementsContext.js.map +1 -0
- package/lib/esm/widget/components/context/GroupingApiConfigContext.d.ts +1 -0
- package/lib/esm/widget/components/context/GroupingApiConfigContext.js +1 -0
- package/lib/esm/widget/components/context/GroupingApiConfigContext.js.map +1 -1
- package/lib/esm/widget/components/context/GroupingMappingCustomUIContext.d.ts +6 -2
- package/lib/esm/widget/components/context/GroupingMappingCustomUIContext.js +5 -5
- package/lib/esm/widget/components/context/GroupingMappingCustomUIContext.js.map +1 -1
- package/lib/esm/widget/components/customUI/DefaultGroupingUI.d.ts +3 -0
- package/lib/esm/widget/components/customUI/DefaultGroupingUI.js +34 -0
- package/lib/esm/widget/components/customUI/DefaultGroupingUI.js.map +1 -0
- package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.d.ts +5 -0
- package/lib/esm/widget/components/{GroupQueryBuilderContainer.js → customUI/GroupQueryBuilderCustomUI.js} +11 -7
- package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -0
- package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.d.ts +3 -2
- package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -1
- package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.d.ts +1 -2
- package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js +1 -2
- package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
- package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.d.ts +1 -2
- package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.js +1 -2
- package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.js.map +1 -1
- package/lib/esm/widget/components/groupsHelpers.d.ts +7 -0
- package/lib/esm/widget/components/groupsHelpers.js +77 -0
- package/lib/esm/widget/components/groupsHelpers.js.map +1 -0
- package/lib/esm/widget/components/property-grid/PropertyGridWrapper.d.ts +1 -1
- package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js +1 -1
- package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js.map +1 -1
- package/lib/esm/widget/components/property-grid/PropertyView.js +1 -3
- package/lib/esm/widget/components/property-grid/PropertyView.js.map +1 -1
- package/lib/esm/widget/components/utils.d.ts +1 -3
- package/lib/esm/widget/components/utils.js +0 -24
- package/lib/esm/widget/components/utils.js.map +1 -1
- package/package.json +3 -3
- package/lib/cjs/widget/components/GroupQueryBuilderContainer.d.ts +0 -5
- package/lib/cjs/widget/components/GroupQueryBuilderContainer.js.map +0 -1
- package/lib/esm/widget/components/GroupQueryBuilderContainer.d.ts +0 -5
- package/lib/esm/widget/components/GroupQueryBuilderContainer.js.map +0 -1
- /package/lib/cjs/widget/components/{GroupQueryBuilder.scss → customUI/GroupQueryBuilderCustomUI.scss} +0 -0
- /package/lib/esm/widget/components/{GroupQueryBuilder.scss → customUI/GroupQueryBuilderCustomUI.scss} +0 -0
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
/** UI Provider for iTwin Viewer Applications */
|
|
2
2
|
export * from "./widget/GroupingMappingWidget";
|
|
3
3
|
/** Interfaces for providing custom MappingClient and API configuration */
|
|
4
|
-
export { createDefaultMappingClient } from "./widget/components/context/MappingClientContext";
|
|
5
|
-
export { ClientPrefix, GetAccessTokenFn } from "./widget/components/context/GroupingApiConfigContext";
|
|
4
|
+
export { createDefaultMappingClient, createMappingClient, MappingClientContext, useMappingClient } from "./widget/components/context/MappingClientContext";
|
|
5
|
+
export { ClientPrefix, GetAccessTokenFn, GroupingMappingApiConfig, GroupingMappingApiConfigContext, useGroupingMappingApiConfig } from "./widget/components/context/GroupingApiConfigContext";
|
|
6
6
|
export * from "@itwin/insights-client";
|
|
7
7
|
/** Internal components for custom UIs */
|
|
8
|
-
export { Mappings } from "./widget/components/Mapping";
|
|
9
|
-
export {
|
|
8
|
+
export { Mappings, MappingsProps } from "./widget/components/Mapping";
|
|
9
|
+
export { MappingAction, MappingActionProps } from "./widget/components/MappingAction";
|
|
10
|
+
export { GroupingMappingContext, GroupingMappingContextProps } from "./widget/components/GroupingMappingContext";
|
|
11
|
+
export { Groupings, GroupingProps } from "./widget/components/Grouping";
|
|
12
|
+
export { GroupAction, GroupActionProps } from "./widget/components/GroupAction";
|
|
10
13
|
export { PropertyMenu } from "./widget/components/PropertyMenu";
|
|
14
|
+
export { SearchGroupingCustomUI } from "./widget/components/customUI/SearchGroupingCustomUI";
|
|
15
|
+
export { ManualGroupingCustomUI } from "./widget/components/customUI/ManualGroupingCustomUI";
|
|
16
|
+
export { GroupQueryBuilderCustomUI } from "./widget/components/customUI/GroupQueryBuilderCustomUI";
|
|
17
|
+
export { GroupingMappingCustomUI, GroupingMappingCustomUIType, ContextCustomUI, GroupingCustomUI, GroupingCustomUIProps, ContextCustomUIProps } from "./widget/components/customUI/GroupingMappingCustomUI";
|
|
11
18
|
/** Formula DataType resolver */
|
|
12
19
|
export { resolveFormulaDataType } from "./formula/FormulaDataTypeResolver";
|
|
13
20
|
export { DataType, PropertyMap } from "./formula/Types";
|
|
14
21
|
export { IResult } from "./formula/IResult";
|
|
15
|
-
export { GroupingMappingCustomUI, GroupingMappingCustomUIType, ContextCustomUI, GroupingCustomUI, GroupingCustomUIProps, ContextCustomUIProps } from "./widget/components/customUI/GroupingMappingCustomUI";
|
|
16
22
|
//# sourceMappingURL=grouping-mapping-widget.d.ts.map
|
|
@@ -10,7 +10,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
10
10
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.GroupingMappingCustomUIType = exports.
|
|
13
|
+
exports.resolveFormulaDataType = exports.GroupingMappingCustomUIType = exports.GroupQueryBuilderCustomUI = exports.ManualGroupingCustomUI = exports.SearchGroupingCustomUI = exports.PropertyMenu = exports.GroupAction = exports.Groupings = exports.GroupingMappingContext = exports.MappingAction = exports.Mappings = exports.useGroupingMappingApiConfig = exports.GroupingMappingApiConfigContext = exports.useMappingClient = exports.MappingClientContext = exports.createMappingClient = exports.createDefaultMappingClient = void 0;
|
|
14
14
|
/*---------------------------------------------------------------------------------------------
|
|
15
15
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
16
16
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -20,17 +20,35 @@ __exportStar(require("./widget/GroupingMappingWidget"), exports);
|
|
|
20
20
|
/** Interfaces for providing custom MappingClient and API configuration */
|
|
21
21
|
var MappingClientContext_1 = require("./widget/components/context/MappingClientContext");
|
|
22
22
|
Object.defineProperty(exports, "createDefaultMappingClient", { enumerable: true, get: function () { return MappingClientContext_1.createDefaultMappingClient; } });
|
|
23
|
+
Object.defineProperty(exports, "createMappingClient", { enumerable: true, get: function () { return MappingClientContext_1.createMappingClient; } });
|
|
24
|
+
Object.defineProperty(exports, "MappingClientContext", { enumerable: true, get: function () { return MappingClientContext_1.MappingClientContext; } });
|
|
25
|
+
Object.defineProperty(exports, "useMappingClient", { enumerable: true, get: function () { return MappingClientContext_1.useMappingClient; } });
|
|
26
|
+
var GroupingApiConfigContext_1 = require("./widget/components/context/GroupingApiConfigContext");
|
|
27
|
+
Object.defineProperty(exports, "GroupingMappingApiConfigContext", { enumerable: true, get: function () { return GroupingApiConfigContext_1.GroupingMappingApiConfigContext; } });
|
|
28
|
+
Object.defineProperty(exports, "useGroupingMappingApiConfig", { enumerable: true, get: function () { return GroupingApiConfigContext_1.useGroupingMappingApiConfig; } });
|
|
23
29
|
__exportStar(require("@itwin/insights-client"), exports);
|
|
24
30
|
/** Internal components for custom UIs */
|
|
25
31
|
var Mapping_1 = require("./widget/components/Mapping");
|
|
26
32
|
Object.defineProperty(exports, "Mappings", { enumerable: true, get: function () { return Mapping_1.Mappings; } });
|
|
33
|
+
var MappingAction_1 = require("./widget/components/MappingAction");
|
|
34
|
+
Object.defineProperty(exports, "MappingAction", { enumerable: true, get: function () { return MappingAction_1.MappingAction; } });
|
|
35
|
+
var GroupingMappingContext_1 = require("./widget/components/GroupingMappingContext");
|
|
36
|
+
Object.defineProperty(exports, "GroupingMappingContext", { enumerable: true, get: function () { return GroupingMappingContext_1.GroupingMappingContext; } });
|
|
27
37
|
var Grouping_1 = require("./widget/components/Grouping");
|
|
28
38
|
Object.defineProperty(exports, "Groupings", { enumerable: true, get: function () { return Grouping_1.Groupings; } });
|
|
39
|
+
var GroupAction_1 = require("./widget/components/GroupAction");
|
|
40
|
+
Object.defineProperty(exports, "GroupAction", { enumerable: true, get: function () { return GroupAction_1.GroupAction; } });
|
|
29
41
|
var PropertyMenu_1 = require("./widget/components/PropertyMenu");
|
|
30
42
|
Object.defineProperty(exports, "PropertyMenu", { enumerable: true, get: function () { return PropertyMenu_1.PropertyMenu; } });
|
|
43
|
+
var SearchGroupingCustomUI_1 = require("./widget/components/customUI/SearchGroupingCustomUI");
|
|
44
|
+
Object.defineProperty(exports, "SearchGroupingCustomUI", { enumerable: true, get: function () { return SearchGroupingCustomUI_1.SearchGroupingCustomUI; } });
|
|
45
|
+
var ManualGroupingCustomUI_1 = require("./widget/components/customUI/ManualGroupingCustomUI");
|
|
46
|
+
Object.defineProperty(exports, "ManualGroupingCustomUI", { enumerable: true, get: function () { return ManualGroupingCustomUI_1.ManualGroupingCustomUI; } });
|
|
47
|
+
var GroupQueryBuilderCustomUI_1 = require("./widget/components/customUI/GroupQueryBuilderCustomUI");
|
|
48
|
+
Object.defineProperty(exports, "GroupQueryBuilderCustomUI", { enumerable: true, get: function () { return GroupQueryBuilderCustomUI_1.GroupQueryBuilderCustomUI; } });
|
|
49
|
+
var GroupingMappingCustomUI_1 = require("./widget/components/customUI/GroupingMappingCustomUI");
|
|
50
|
+
Object.defineProperty(exports, "GroupingMappingCustomUIType", { enumerable: true, get: function () { return GroupingMappingCustomUI_1.GroupingMappingCustomUIType; } });
|
|
31
51
|
/** Formula DataType resolver */
|
|
32
52
|
var FormulaDataTypeResolver_1 = require("./formula/FormulaDataTypeResolver");
|
|
33
53
|
Object.defineProperty(exports, "resolveFormulaDataType", { enumerable: true, get: function () { return FormulaDataTypeResolver_1.resolveFormulaDataType; } });
|
|
34
|
-
var GroupingMappingCustomUI_1 = require("./widget/components/customUI/GroupingMappingCustomUI");
|
|
35
|
-
Object.defineProperty(exports, "GroupingMappingCustomUIType", { enumerable: true, get: function () { return GroupingMappingCustomUI_1.GroupingMappingCustomUIType; } });
|
|
36
54
|
//# sourceMappingURL=grouping-mapping-widget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouping-mapping-widget.js","sourceRoot":"","sources":["../../src/grouping-mapping-widget.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,gDAAgD;AAChD,iEAA+C;AAE/C,0EAA0E;AAC1E,
|
|
1
|
+
{"version":3,"file":"grouping-mapping-widget.js","sourceRoot":"","sources":["../../src/grouping-mapping-widget.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,gDAAgD;AAChD,iEAA+C;AAE/C,0EAA0E;AAC1E,yFAA2J;AAAlJ,kIAAA,0BAA0B,OAAA;AAAE,2HAAA,mBAAmB,OAAA;AAAE,4HAAA,oBAAoB,OAAA;AAAE,wHAAA,gBAAgB,OAAA;AAChG,iGAA8L;AAA3H,2IAAA,+BAA+B,OAAA;AAAE,uIAAA,2BAA2B,OAAA;AAC/H,yDAAuC;AAEvC,yCAAyC;AACzC,uDAAsE;AAA7D,mGAAA,QAAQ,OAAA;AACjB,mEAAsF;AAA7E,8GAAA,aAAa,OAAA;AACtB,qFAAiH;AAAxG,gIAAA,sBAAsB,OAAA;AAC/B,yDAAwE;AAA/D,qGAAA,SAAS,OAAA;AAClB,+DAAgF;AAAvE,0GAAA,WAAW,OAAA;AACpB,iEAAgE;AAAvD,4GAAA,YAAY,OAAA;AACrB,8FAA6F;AAApF,gIAAA,sBAAsB,OAAA;AAC/B,8FAA6F;AAApF,gIAAA,sBAAsB,OAAA;AAC/B,oGAAmG;AAA1F,sIAAA,yBAAyB,OAAA;AAClC,gGAA4M;AAA1K,sIAAA,2BAA2B,OAAA;AAE7D,gCAAgC;AAChC,6EAA2E;AAAlE,iIAAA,sBAAsB,OAAA","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/** UI Provider for iTwin Viewer Applications */\nexport * from \"./widget/GroupingMappingWidget\";\n\n/** Interfaces for providing custom MappingClient and API configuration */\nexport { createDefaultMappingClient, createMappingClient, MappingClientContext, useMappingClient } from \"./widget/components/context/MappingClientContext\";\nexport { ClientPrefix, GetAccessTokenFn, GroupingMappingApiConfig, GroupingMappingApiConfigContext, useGroupingMappingApiConfig } from \"./widget/components/context/GroupingApiConfigContext\";\nexport * from \"@itwin/insights-client\";\n\n/** Internal components for custom UIs */\nexport { Mappings, MappingsProps } from \"./widget/components/Mapping\";\nexport { MappingAction, MappingActionProps } from \"./widget/components/MappingAction\";\nexport { GroupingMappingContext, GroupingMappingContextProps } from \"./widget/components/GroupingMappingContext\";\nexport { Groupings, GroupingProps } from \"./widget/components/Grouping\";\nexport { GroupAction, GroupActionProps } from \"./widget/components/GroupAction\";\nexport { PropertyMenu } from \"./widget/components/PropertyMenu\";\nexport { SearchGroupingCustomUI } from \"./widget/components/customUI/SearchGroupingCustomUI\";\nexport { ManualGroupingCustomUI } from \"./widget/components/customUI/ManualGroupingCustomUI\";\nexport { GroupQueryBuilderCustomUI } from \"./widget/components/customUI/GroupQueryBuilderCustomUI\";\nexport { GroupingMappingCustomUI, GroupingMappingCustomUIType, ContextCustomUI, GroupingCustomUI, GroupingCustomUIProps, ContextCustomUIProps } from \"./widget/components/customUI/GroupingMappingCustomUI\";\n\n/** Formula DataType resolver */\nexport { resolveFormulaDataType } from \"./formula/FormulaDataTypeResolver\";\nexport { DataType, PropertyMap } from \"./formula/Types\";\nexport { IResult } from \"./formula/IResult\";\n"]}
|
|
@@ -28,13 +28,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
28
28
|
*--------------------------------------------------------------------------------------------*/
|
|
29
29
|
const react_1 = __importDefault(require("react"));
|
|
30
30
|
require("@testing-library/jest-dom");
|
|
31
|
-
const test_utils_1 = require("./test-utils");
|
|
32
31
|
const faker_1 = require("@faker-js/faker");
|
|
33
32
|
const grouping_mapping_widget_1 = require("../grouping-mapping-widget");
|
|
34
33
|
const moq = __importStar(require("typemoq"));
|
|
35
|
-
const grouping_mapping_widget_2 = require("../grouping-mapping-widget");
|
|
36
34
|
const user_event_1 = __importDefault(require("@testing-library/user-event"));
|
|
37
|
-
const
|
|
35
|
+
const test_utils_1 = require("../test/test-utils");
|
|
38
36
|
const mockITwinId = faker_1.faker.datatype.uuid();
|
|
39
37
|
const mockIModelId = faker_1.faker.datatype.uuid();
|
|
40
38
|
const mockMappingId = faker_1.faker.datatype.uuid();
|
|
@@ -76,61 +74,44 @@ const groupsFactory = () => ({
|
|
|
76
74
|
},
|
|
77
75
|
});
|
|
78
76
|
const connectionMock = moq.Mock.ofType();
|
|
79
|
-
|
|
77
|
+
const viewManagerMock = moq.Mock.ofType();
|
|
80
78
|
const mappingClientMock = moq.Mock.ofType();
|
|
81
79
|
jest.mock("@itwin/appui-react", () => ({
|
|
82
80
|
...jest.requireActual("@itwin/appui-react"),
|
|
83
81
|
useActiveIModelConnection: () => connectionMock.object,
|
|
84
82
|
}));
|
|
85
|
-
|
|
86
|
-
jest.
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}),
|
|
91
|
-
}));
|
|
92
|
-
jest.mock("../widget/components/context/GroupingMappingCustomUIContext", () => ({
|
|
93
|
-
...jest.requireActual("../widget/components/context/GroupingMappingCustomUIContext"),
|
|
94
|
-
useGroupingMappingCustomUI: () => groupingMappingCustomUIMock,
|
|
83
|
+
jest.mock("@itwin/core-frontend", () => ({
|
|
84
|
+
...jest.requireActual("@itwin/core-frontend"),
|
|
85
|
+
IModelApp: {
|
|
86
|
+
viewManager: {},
|
|
87
|
+
},
|
|
95
88
|
}));
|
|
96
89
|
jest.mock("../widget/components/context/MappingClientContext", () => ({
|
|
97
90
|
...jest.requireActual("../widget/components/context/MappingClientContext"),
|
|
98
91
|
useMappingClient: () => mappingClientMock.object,
|
|
99
92
|
}));
|
|
100
93
|
const mockGroups = groupsFactory();
|
|
101
|
-
describe("Groupings View
|
|
94
|
+
describe("Groupings View", () => {
|
|
102
95
|
beforeEach(async () => {
|
|
103
96
|
connectionMock.setup((x) => x.iModelId).returns(() => mockIModelId);
|
|
104
97
|
connectionMock.setup((x) => x.iTwinId).returns(() => mockITwinId);
|
|
105
|
-
const mockedAccessToken = await mockAccessToken();
|
|
106
98
|
mappingClientMock
|
|
107
|
-
.setup(async (x) => x.getGroups(
|
|
99
|
+
.setup(async (x) => x.getGroups(moq.It.isAny(), moq.It.isAny(), moq.It.isAny()))
|
|
108
100
|
.returns(async () => Promise.resolve(mockGroups.groups));
|
|
109
101
|
});
|
|
110
102
|
afterEach(() => {
|
|
111
103
|
connectionMock.reset();
|
|
112
104
|
mappingClientMock.reset();
|
|
113
|
-
|
|
105
|
+
viewManagerMock.reset();
|
|
114
106
|
});
|
|
115
|
-
it("List all groups
|
|
107
|
+
it("List all groups", async () => {
|
|
116
108
|
// Arange
|
|
117
109
|
// Act
|
|
118
110
|
const user = user_event_1.default.setup();
|
|
119
|
-
|
|
111
|
+
test_utils_1.render(react_1.default.createElement(grouping_mapping_widget_1.Groupings, { mapping: mockMapping, onClickAddGroup: jest.fn(), onClickGroupModify: jest.fn(), onClickGroupTitle: jest.fn, onClickRenderContextCustomUI: jest.fn() }));
|
|
120
112
|
await test_utils_1.waitForElementToBeRemoved(() => test_utils_1.screen.getByText(/loading/i));
|
|
121
113
|
// Assert
|
|
122
|
-
|
|
123
|
-
expect(addButton).toHaveLength(1);
|
|
124
|
-
// Click on 'Add Group' button
|
|
125
|
-
await user.click(addButton[0]);
|
|
126
|
-
// Should have three menu items
|
|
127
|
-
const addSelection = test_utils_1.screen.getAllByTestId("gmw-add-0");
|
|
128
|
-
expect(addSelection).toHaveLength(1);
|
|
129
|
-
const addSearch = test_utils_1.screen.getAllByTestId("gmw-add-1");
|
|
130
|
-
expect(addSearch).toHaveLength(1);
|
|
131
|
-
const addManual = test_utils_1.screen.getAllByTestId("gmw-add-2");
|
|
132
|
-
expect(addManual).toHaveLength(1);
|
|
133
|
-
// Should have the right group number
|
|
114
|
+
// Should have the correct random mockGroups.groups count listed
|
|
134
115
|
const horizontalTiles = test_utils_1.screen.getAllByTestId("gmw-horizontal-tile");
|
|
135
116
|
expect(horizontalTiles).toHaveLength(mockGroups.groups.length);
|
|
136
117
|
horizontalTiles.forEach((horizontalTile, index) => {
|
|
@@ -143,35 +124,23 @@ describe("Groupings View with default UIs", () => {
|
|
|
143
124
|
const moreButton = test_utils_1.screen.getAllByTestId("gmw-more-button");
|
|
144
125
|
expect(moreButton).toHaveLength(mockGroups.groups.length);
|
|
145
126
|
await user.click(moreButton[0]);
|
|
146
|
-
// Should have
|
|
127
|
+
// Should only have the permanent delete context item.
|
|
147
128
|
const contextMenuItems = test_utils_1.screen.getAllByTestId("gmw-context-menu-item");
|
|
148
|
-
expect(contextMenuItems).toHaveLength(
|
|
149
|
-
expect(contextMenuItems[0]).toHaveTextContent("
|
|
150
|
-
expect(contextMenuItems[1]).toHaveTextContent("Properties");
|
|
151
|
-
expect(contextMenuItems[2]).toHaveTextContent("Remove");
|
|
152
|
-
// Hover on 'Edit'
|
|
153
|
-
await user.hover(contextMenuItems[0]);
|
|
154
|
-
// Should have 3 sub menu items
|
|
155
|
-
const editSelection = test_utils_1.screen.getAllByTestId(`gmw-edit-0`);
|
|
156
|
-
expect(editSelection).toHaveLength(1);
|
|
157
|
-
const editSearch = test_utils_1.screen.getAllByTestId(`gmw-edit-1`);
|
|
158
|
-
expect(editSearch).toHaveLength(1);
|
|
159
|
-
const editManual = test_utils_1.screen.getAllByTestId(`gmw-edit-2`);
|
|
160
|
-
expect(editManual).toHaveLength(1);
|
|
129
|
+
expect(contextMenuItems).toHaveLength(1);
|
|
130
|
+
expect(contextMenuItems[0]).toHaveTextContent("Remove");
|
|
161
131
|
});
|
|
162
|
-
it("Set up grouping custom UI
|
|
132
|
+
it("Set up grouping custom UI", async () => {
|
|
163
133
|
// Arange
|
|
164
134
|
const mockedUIComponent = (_props) => react_1.default.createElement("div");
|
|
165
135
|
const mockGroupingUI = {
|
|
166
|
-
type:
|
|
136
|
+
type: grouping_mapping_widget_1.GroupingMappingCustomUIType.Grouping,
|
|
167
137
|
name: "mOcKgRoUpInGuI",
|
|
168
138
|
displayLabel: "Mock Grouping UI",
|
|
169
139
|
uiComponent: mockedUIComponent,
|
|
170
140
|
};
|
|
171
|
-
groupingMappingCustomUIMock = [mockGroupingUI];
|
|
141
|
+
const groupingMappingCustomUIMock = [mockGroupingUI];
|
|
172
142
|
// Act
|
|
173
|
-
const user =
|
|
174
|
-
react_2.render(react_1.default.createElement(grouping_mapping_widget_1.Groupings, { mapping: mockMapping, goBack: jest.fn() }));
|
|
143
|
+
const { user } = test_utils_1.render(react_1.default.createElement(grouping_mapping_widget_1.Groupings, { mapping: mockMapping, onClickAddGroup: jest.fn(), onClickGroupModify: jest.fn(), onClickGroupTitle: jest.fn, onClickRenderContextCustomUI: jest.fn() }), groupingMappingCustomUIMock);
|
|
175
144
|
await test_utils_1.waitForElementToBeRemoved(() => test_utils_1.screen.getByText(/loading/i));
|
|
176
145
|
// Assert
|
|
177
146
|
const addButton = test_utils_1.screen.getAllByTestId("gmw-add-group-button");
|
|
@@ -188,9 +157,9 @@ describe("Groupings View with default UIs", () => {
|
|
|
188
157
|
expect(moreButton.length).toBeGreaterThan(0);
|
|
189
158
|
// Click on first more icon
|
|
190
159
|
await user.click(moreButton[0]);
|
|
191
|
-
// Should have
|
|
160
|
+
// Should have 2 context menu items
|
|
192
161
|
const contextMenuItems = test_utils_1.screen.getAllByTestId("gmw-context-menu-item");
|
|
193
|
-
expect(contextMenuItems).toHaveLength(
|
|
162
|
+
expect(contextMenuItems).toHaveLength(2);
|
|
194
163
|
expect(contextMenuItems[0]).toHaveTextContent("Edit");
|
|
195
164
|
// Hover on 'Edit'
|
|
196
165
|
await user.hover(contextMenuItems[0]);
|
|
@@ -203,32 +172,21 @@ describe("Groupings View with default UIs", () => {
|
|
|
203
172
|
const groupName = test_utils_1.screen.getAllByText(mockGroups.groups[0].groupName);
|
|
204
173
|
expect(groupName).toHaveLength(1);
|
|
205
174
|
});
|
|
206
|
-
it("Set up context custom UI - should have
|
|
175
|
+
it("Set up context custom UI - should have add context menu", async () => {
|
|
207
176
|
// Arange
|
|
208
177
|
const mockedUIComponent = (_props) => react_1.default.createElement("div");
|
|
209
178
|
const mockContextUI = {
|
|
210
|
-
type:
|
|
179
|
+
type: grouping_mapping_widget_1.GroupingMappingCustomUIType.Context,
|
|
211
180
|
name: "mOcKgRoUpInGuI",
|
|
212
181
|
displayLabel: "Mock Grouping UI",
|
|
213
182
|
uiComponent: mockedUIComponent,
|
|
214
183
|
};
|
|
215
|
-
groupingMappingCustomUIMock = [mockContextUI];
|
|
184
|
+
const groupingMappingCustomUIMock = [mockContextUI];
|
|
185
|
+
const onClickRenderContextCustomUIMock = jest.fn();
|
|
216
186
|
// Act
|
|
217
|
-
const user =
|
|
218
|
-
react_2.render(react_1.default.createElement(grouping_mapping_widget_1.Groupings, { mapping: mockMapping, goBack: jest.fn() }));
|
|
187
|
+
const { user } = test_utils_1.render(react_1.default.createElement(grouping_mapping_widget_1.Groupings, { mapping: mockMapping, onClickAddGroup: jest.fn(), onClickGroupModify: jest.fn(), onClickGroupTitle: jest.fn, onClickRenderContextCustomUI: onClickRenderContextCustomUIMock }), groupingMappingCustomUIMock);
|
|
219
188
|
await test_utils_1.waitForElementToBeRemoved(() => test_utils_1.screen.getByText(/loading/i));
|
|
220
189
|
// Assert
|
|
221
|
-
const addButton = test_utils_1.screen.getAllByTestId("gmw-add-group-button");
|
|
222
|
-
expect(addButton).toHaveLength(1);
|
|
223
|
-
// Click on 'Add Group' button
|
|
224
|
-
await user.click(addButton[0]);
|
|
225
|
-
// Should have three menu items
|
|
226
|
-
const addSelection = test_utils_1.screen.getAllByTestId("gmw-add-0");
|
|
227
|
-
expect(addSelection).toHaveLength(1);
|
|
228
|
-
const addSearch = test_utils_1.screen.getAllByTestId("gmw-add-1");
|
|
229
|
-
expect(addSearch).toHaveLength(1);
|
|
230
|
-
const addManual = test_utils_1.screen.getAllByTestId("gmw-add-2");
|
|
231
|
-
expect(addManual).toHaveLength(1);
|
|
232
190
|
// Should have the right group number
|
|
233
191
|
const horizontalTiles = test_utils_1.screen.getAllByTestId("gmw-horizontal-tile");
|
|
234
192
|
expect(horizontalTiles).toHaveLength(mockGroups.groups.length);
|
|
@@ -236,36 +194,37 @@ describe("Groupings View with default UIs", () => {
|
|
|
236
194
|
const moreButton = test_utils_1.screen.getAllByTestId("gmw-more-button");
|
|
237
195
|
expect(moreButton).toHaveLength(mockGroups.groups.length);
|
|
238
196
|
await user.click(moreButton[0]);
|
|
239
|
-
// Should have
|
|
197
|
+
// Should have 2 context menu items
|
|
240
198
|
const contextMenuItems = test_utils_1.screen.getAllByTestId("gmw-context-menu-item");
|
|
241
|
-
expect(contextMenuItems).toHaveLength(
|
|
242
|
-
expect(contextMenuItems[0]).toHaveTextContent(
|
|
243
|
-
expect(contextMenuItems[1]).toHaveTextContent("
|
|
244
|
-
expect(contextMenuItems[2]).toHaveTextContent("Remove");
|
|
245
|
-
expect(contextMenuItems[3]).toHaveTextContent(mockContextUI.displayLabel);
|
|
199
|
+
expect(contextMenuItems).toHaveLength(2);
|
|
200
|
+
expect(contextMenuItems[0]).toHaveTextContent(mockContextUI.displayLabel);
|
|
201
|
+
expect(contextMenuItems[1]).toHaveTextContent("Remove");
|
|
246
202
|
// Click on the context ui
|
|
247
|
-
await user.click(contextMenuItems[
|
|
203
|
+
await user.click(contextMenuItems[0]);
|
|
204
|
+
// Callback should have been called with correct parameters
|
|
205
|
+
expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedUIComponent, mockGroups.groups[0]);
|
|
248
206
|
});
|
|
249
207
|
it("Set up both grouping and context custom UI", async () => {
|
|
250
208
|
// Arange
|
|
251
209
|
const mockedGroupingUIComponent = (_props) => react_1.default.createElement("div");
|
|
252
210
|
const mockedContextUIComponent = (_props) => react_1.default.createElement("div");
|
|
253
211
|
const mockGroupingUI = {
|
|
254
|
-
type:
|
|
212
|
+
type: grouping_mapping_widget_1.GroupingMappingCustomUIType.Grouping,
|
|
255
213
|
name: "mOcKgRoUpInGuI",
|
|
256
214
|
displayLabel: "Mock Grouping UI",
|
|
257
215
|
uiComponent: mockedGroupingUIComponent,
|
|
258
216
|
};
|
|
259
217
|
const mockContextUI = {
|
|
260
|
-
type:
|
|
218
|
+
type: grouping_mapping_widget_1.GroupingMappingCustomUIType.Context,
|
|
261
219
|
name: "mOcKgRoUpInGuI",
|
|
262
220
|
displayLabel: "Mock Grouping UI",
|
|
263
221
|
uiComponent: mockedContextUIComponent,
|
|
264
222
|
};
|
|
265
|
-
groupingMappingCustomUIMock = [mockContextUI, mockGroupingUI];
|
|
223
|
+
const groupingMappingCustomUIMock = [mockContextUI, mockGroupingUI];
|
|
224
|
+
const onClickAddGroup = jest.fn();
|
|
225
|
+
const onClickRenderContextCustomUIMock = jest.fn();
|
|
266
226
|
// Act
|
|
267
|
-
const user =
|
|
268
|
-
react_2.render(react_1.default.createElement(grouping_mapping_widget_1.Groupings, { mapping: mockMapping, goBack: jest.fn() }));
|
|
227
|
+
const { user } = test_utils_1.render(react_1.default.createElement(grouping_mapping_widget_1.Groupings, { mapping: mockMapping, onClickAddGroup: onClickAddGroup, onClickGroupModify: jest.fn(), onClickGroupTitle: jest.fn, onClickRenderContextCustomUI: onClickRenderContextCustomUIMock }), groupingMappingCustomUIMock);
|
|
269
228
|
await test_utils_1.waitForElementToBeRemoved(() => test_utils_1.screen.getByText(/loading/i));
|
|
270
229
|
// Assert
|
|
271
230
|
const addButton = test_utils_1.screen.getAllByTestId("gmw-add-group-button");
|
|
@@ -276,6 +235,9 @@ describe("Groupings View with default UIs", () => {
|
|
|
276
235
|
const addCustom = test_utils_1.screen.getAllByTestId("gmw-add-0");
|
|
277
236
|
expect(addCustom).toHaveLength(1);
|
|
278
237
|
expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);
|
|
238
|
+
await user.click(addCustom[0]);
|
|
239
|
+
// Callback should have been called with correct parameters
|
|
240
|
+
expect(onClickAddGroup).toBeCalledWith(mockGroupingUI.name);
|
|
279
241
|
// Check the group tile number
|
|
280
242
|
const horizontalTiles = test_utils_1.screen.getAllByTestId("gmw-horizontal-tile");
|
|
281
243
|
expect(horizontalTiles).toHaveLength(mockGroups.groups.length);
|
|
@@ -283,15 +245,16 @@ describe("Groupings View with default UIs", () => {
|
|
|
283
245
|
const moreButton = test_utils_1.screen.getAllByTestId("gmw-more-button");
|
|
284
246
|
expect(moreButton).toHaveLength(mockGroups.groups.length);
|
|
285
247
|
await user.click(moreButton[0]);
|
|
286
|
-
// Should have
|
|
248
|
+
// Should have 3 context menu items
|
|
287
249
|
const contextMenuItems = test_utils_1.screen.getAllByTestId("gmw-context-menu-item");
|
|
288
|
-
expect(contextMenuItems).toHaveLength(
|
|
250
|
+
expect(contextMenuItems).toHaveLength(3);
|
|
289
251
|
expect(contextMenuItems[0]).toHaveTextContent("Edit");
|
|
290
|
-
expect(contextMenuItems[1]).toHaveTextContent(
|
|
252
|
+
expect(contextMenuItems[1]).toHaveTextContent(mockContextUI.displayLabel);
|
|
291
253
|
expect(contextMenuItems[2]).toHaveTextContent("Remove");
|
|
292
|
-
expect(contextMenuItems[3]).toHaveTextContent(mockContextUI.displayLabel);
|
|
293
254
|
// Click on the context ui
|
|
294
|
-
await user.click(contextMenuItems[
|
|
255
|
+
await user.click(contextMenuItems[1]);
|
|
256
|
+
// Callback should have been called with correct parameters
|
|
257
|
+
expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedContextUIComponent, mockGroups.groups[0]);
|
|
295
258
|
});
|
|
296
259
|
});
|
|
297
260
|
//# sourceMappingURL=GroupingMappingCustomUI.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupingMappingCustomUI.test.js","sourceRoot":"","sources":["../../../src/test/GroupingMappingCustomUI.test.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 React from \"react\";\nimport \"@testing-library/jest-dom\";\nimport { screen, waitForElementToBeRemoved, within } from \"./test-utils\";\nimport { faker } from \"@faker-js/faker\";\nimport { Groupings } from \"../grouping-mapping-widget\";\nimport type { GroupCollection, IMappingsClient, Mapping } from \"@itwin/insights-client\";\nimport * as moq from \"typemoq\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { ContextCustomUIProps, GroupingCustomUIProps, GroupingMappingCustomUI } from \"../grouping-mapping-widget\";\nimport { GroupingMappingCustomUIType } from \"../grouping-mapping-widget\";\nimport userEvent from \"@testing-library/user-event\";\nimport { render } from \"@testing-library/react\";\n\nconst mockITwinId = faker.datatype.uuid();\nconst mockIModelId = faker.datatype.uuid();\nconst mockMappingId = faker.datatype.uuid();\nconst mockMapping: Mapping = {\n id: mockMappingId,\n mappingName: \"mOcKmApPiNg1\",\n description: \"mOcKmApPiNgDeScRiPtIoN1\",\n createdBy: faker.random.alpha(),\n createdOn: faker.date.past().toDateString(),\n modifiedBy: faker.random.alpha(),\n modifiedOn: faker.date.past().toDateString(),\n extractionEnabled: false,\n _links: {\n imodel: {\n href: \"\",\n },\n },\n};\n\nconst groupsFactory = (): GroupCollection => ({\n groups: Array.from(\n { length: faker.datatype.number({ min: 3, max: 5 }) },\n (_, index) => ({\n id: `${faker.datatype.uuid()}`,\n groupName: `mOcKgRoUp${index}`,\n description: `mOcKgRoUpDeScRiPtIoN${index}`,\n query: `mOcKgRoUpQuErY${index}`,\n _links: {\n imodel: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n },\n })\n ),\n _links: {\n next: undefined,\n self: {\n href: \"\",\n },\n },\n});\n\nconst connectionMock = moq.Mock.ofType<IModelConnection>();\nlet groupingMappingCustomUIMock: GroupingMappingCustomUI[] = [];\nconst mappingClientMock = moq.Mock.ofType<IMappingsClient>();\n\njest.mock(\"@itwin/appui-react\", () => ({\n ...jest.requireActual(\"@itwin/appui-react\"),\n useActiveIModelConnection: () => connectionMock.object,\n}));\n\nconst mockAccessToken = jest.fn().mockResolvedValue(\"Bearer eyJhbGci\");\n\njest.mock(\"../widget/components/context/GroupingApiConfigContext\", () => ({\n ...jest.requireActual(\"../widget/components/context/GroupingApiConfigContext\"),\n useGroupingMappingApiConfig: () => ({\n getAccessToken: mockAccessToken,\n }),\n}));\n\njest.mock(\"../widget/components/context/GroupingMappingCustomUIContext\", () => ({\n ...jest.requireActual(\"../widget/components/context/GroupingMappingCustomUIContext\"),\n useGroupingMappingCustomUI: () => groupingMappingCustomUIMock,\n}));\n\njest.mock(\"../widget/components/context/MappingClientContext\", () => ({\n ...jest.requireActual(\"../widget/components/context/MappingClientContext\"),\n useMappingClient: () => mappingClientMock.object,\n}));\n\nconst mockGroups = groupsFactory();\n\ndescribe(\"Groupings View with default UIs\", () => {\n beforeEach(async () => {\n connectionMock.setup((x) => x.iModelId).returns(() => mockIModelId);\n connectionMock.setup((x) => x.iTwinId).returns(() => mockITwinId);\n\n const mockedAccessToken = await mockAccessToken();\n mappingClientMock\n .setup(async (x) => x.getGroups(mockedAccessToken, mockIModelId, mockMappingId))\n .returns(async () => Promise.resolve(mockGroups.groups));\n });\n\n afterEach(() => {\n connectionMock.reset();\n mappingClientMock.reset();\n groupingMappingCustomUIMock = [];\n });\n\n it(\"List all groups and click on add group and edit group buttons\", async () => {\n // Arange\n\n // Act\n const user = userEvent.setup();\n render(<Groupings mapping={mockMapping} goBack={jest.fn()} />);\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have three menu items\n const addSelection = screen.getAllByTestId(\"gmw-add-0\");\n expect(addSelection).toHaveLength(1);\n const addSearch = screen.getAllByTestId(\"gmw-add-1\");\n expect(addSearch).toHaveLength(1);\n const addManual = screen.getAllByTestId(\"gmw-add-2\");\n expect(addManual).toHaveLength(1);\n\n // Should have the right group number\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n horizontalTiles.forEach((horizontalTile, index) => {\n const groupTile = within(horizontalTile);\n expect(\n groupTile.getByText(\n mockGroups.groups[index].groupName\n )\n ).toBeInTheDocument();\n expect(\n groupTile.getByText(\n mockGroups.groups[index].description ?? \"\"\n )\n ).toBeInTheDocument();\n });\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should have 3 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(3);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n expect(contextMenuItems[1]).toHaveTextContent(\"Properties\");\n expect(contextMenuItems[2]).toHaveTextContent(\"Remove\");\n\n // Hover on 'Edit'\n await user.hover(contextMenuItems[0]);\n\n // Should have 3 sub menu items\n const editSelection = screen.getAllByTestId(`gmw-edit-0`);\n expect(editSelection).toHaveLength(1);\n const editSearch = screen.getAllByTestId(`gmw-edit-1`);\n expect(editSearch).toHaveLength(1);\n const editManual = screen.getAllByTestId(`gmw-edit-2`);\n expect(editManual).toHaveLength(1);\n });\n\n it(\"Set up grouping custom UI - should replace default grouping methods\", async () => {\n // Arange\n const mockedUIComponent = (_props: GroupingCustomUIProps) => React.createElement(\"div\");\n const mockGroupingUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Grouping,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedUIComponent,\n };\n\n groupingMappingCustomUIMock = [mockGroupingUI];\n\n // Act\n const user = userEvent.setup();\n render(<Groupings mapping={mockMapping} goBack={jest.fn()} />);\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have exactly 1 add method with given configuration\n const addCustom = screen.getAllByTestId(\"gmw-add-0\");\n expect(addCustom).toHaveLength(1);\n expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n // Each group should have a more icon button\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n expect(moreButton.length).toBeGreaterThan(0);\n\n // Click on first more icon\n await user.click(moreButton[0]);\n\n // Should have 3 context menu items without context configuration\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(3);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n\n // Hover on 'Edit'\n await user.hover(contextMenuItems[0]);\n\n // Should have exactly 1 sub menu item\n const editCustom = screen.getAllByTestId(`gmw-edit-0`);\n expect(editCustom).toHaveLength(1);\n expect(editCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n // Click on the edit custom UI\n await user.click(editCustom[0]);\n\n const groupName = screen.getAllByText(mockGroups.groups[0].groupName);\n expect(groupName).toHaveLength(1);\n });\n\n it(\"Set up context custom UI - should have default grouping methods and add context menu\", async () => {\n // Arange\n const mockedUIComponent = (_props: ContextCustomUIProps) => React.createElement(\"div\");\n const mockContextUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Context,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedUIComponent,\n };\n\n groupingMappingCustomUIMock = [mockContextUI];\n\n // Act\n const user = userEvent.setup();\n render(<Groupings mapping={mockMapping} goBack={jest.fn()} />);\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have three menu items\n const addSelection = screen.getAllByTestId(\"gmw-add-0\");\n expect(addSelection).toHaveLength(1);\n const addSearch = screen.getAllByTestId(\"gmw-add-1\");\n expect(addSearch).toHaveLength(1);\n const addManual = screen.getAllByTestId(\"gmw-add-2\");\n expect(addManual).toHaveLength(1);\n\n // Should have the right group number\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should have 4 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(4);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n expect(contextMenuItems[1]).toHaveTextContent(\"Properties\");\n expect(contextMenuItems[2]).toHaveTextContent(\"Remove\");\n expect(contextMenuItems[3]).toHaveTextContent(mockContextUI.displayLabel);\n\n // Click on the context ui\n await user.click(contextMenuItems[3]);\n });\n\n it(\"Set up both grouping and context custom UI\", async () => {\n // Arange\n const mockedGroupingUIComponent = (_props: GroupingCustomUIProps) => React.createElement(\"div\");\n const mockedContextUIComponent = (_props: ContextCustomUIProps) => React.createElement(\"div\");\n const mockGroupingUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Grouping,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedGroupingUIComponent,\n };\n const mockContextUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Context,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedContextUIComponent,\n };\n\n groupingMappingCustomUIMock = [mockContextUI, mockGroupingUI];\n\n // Act\n const user = userEvent.setup();\n render(<Groupings mapping={mockMapping} goBack={jest.fn()} />);\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have exactly 1 add method with given configuration\n const addCustom = screen.getAllByTestId(\"gmw-add-0\");\n expect(addCustom).toHaveLength(1);\n expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n // Check the group tile number\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should have 4 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(4);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n expect(contextMenuItems[1]).toHaveTextContent(\"Properties\");\n expect(contextMenuItems[2]).toHaveTextContent(\"Remove\");\n expect(contextMenuItems[3]).toHaveTextContent(mockContextUI.displayLabel);\n\n // Click on the context ui\n await user.click(contextMenuItems[3]);\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"GroupingMappingCustomUI.test.js","sourceRoot":"","sources":["../../../src/test/GroupingMappingCustomUI.test.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 React from \"react\";\nimport \"@testing-library/jest-dom\";\nimport { faker } from \"@faker-js/faker\";\nimport { GroupingMappingCustomUIType, Groupings } from \"../grouping-mapping-widget\";\nimport type { GroupCollection, IMappingsClient, Mapping } from \"@itwin/insights-client\";\nimport * as moq from \"typemoq\";\nimport type { IModelConnection, ViewManager } from \"@itwin/core-frontend\";\nimport type { ContextCustomUIProps, GroupingCustomUIProps, GroupingMappingCustomUI } from \"../grouping-mapping-widget\";\nimport userEvent from \"@testing-library/user-event\";\nimport { render, screen, waitForElementToBeRemoved, within } from \"../test/test-utils\";\n\nconst mockITwinId = faker.datatype.uuid();\nconst mockIModelId = faker.datatype.uuid();\nconst mockMappingId = faker.datatype.uuid();\nconst mockMapping: Mapping = {\n id: mockMappingId,\n mappingName: \"mOcKmApPiNg1\",\n description: \"mOcKmApPiNgDeScRiPtIoN1\",\n createdBy: faker.random.alpha(),\n createdOn: faker.date.past().toDateString(),\n modifiedBy: faker.random.alpha(),\n modifiedOn: faker.date.past().toDateString(),\n extractionEnabled: false,\n _links: {\n imodel: {\n href: \"\",\n },\n },\n};\n\nconst groupsFactory = (): GroupCollection => ({\n groups: Array.from(\n { length: faker.datatype.number({ min: 3, max: 5 }) },\n (_, index) => ({\n id: `${faker.datatype.uuid()}`,\n groupName: `mOcKgRoUp${index}`,\n description: `mOcKgRoUpDeScRiPtIoN${index}`,\n query: `mOcKgRoUpQuErY${index}`,\n _links: {\n imodel: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n },\n })\n ),\n _links: {\n next: undefined,\n self: {\n href: \"\",\n },\n },\n});\n\nconst connectionMock = moq.Mock.ofType<IModelConnection>();\nconst viewManagerMock = moq.Mock.ofType<ViewManager>();\nconst mappingClientMock = moq.Mock.ofType<IMappingsClient>();\n\njest.mock(\"@itwin/appui-react\", () => ({\n ...jest.requireActual(\"@itwin/appui-react\"),\n useActiveIModelConnection: () => connectionMock.object,\n}));\n\njest.mock(\"@itwin/core-frontend\", () => ({\n ...jest.requireActual(\"@itwin/core-frontend\"),\n IModelApp: {\n viewManager: {},\n },\n}));\n\njest.mock(\"../widget/components/context/MappingClientContext\", () => ({\n ...jest.requireActual(\"../widget/components/context/MappingClientContext\"),\n useMappingClient: () => mappingClientMock.object,\n}));\n\nconst mockGroups = groupsFactory();\n\ndescribe(\"Groupings View\", () => {\n beforeEach(async () => {\n connectionMock.setup((x) => x.iModelId).returns(() => mockIModelId);\n connectionMock.setup((x) => x.iTwinId).returns(() => mockITwinId);\n\n mappingClientMock\n .setup(async (x) => x.getGroups(moq.It.isAny(), moq.It.isAny(), moq.It.isAny()))\n .returns(async () => Promise.resolve(mockGroups.groups));\n });\n\n afterEach(() => {\n connectionMock.reset();\n mappingClientMock.reset();\n viewManagerMock.reset();\n });\n\n it(\"List all groups\", async () => {\n // Arange\n\n // Act\n const user = userEvent.setup();\n render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={jest.fn()}\n />\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n\n // Should have the correct random mockGroups.groups count listed\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n horizontalTiles.forEach((horizontalTile, index) => {\n const groupTile = within(horizontalTile);\n expect(\n groupTile.getByText(\n mockGroups.groups[index].groupName\n )\n ).toBeInTheDocument();\n expect(\n groupTile.getByText(\n mockGroups.groups[index].description ?? \"\"\n )\n ).toBeInTheDocument();\n });\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should only have the permanent delete context item.\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(1);\n expect(contextMenuItems[0]).toHaveTextContent(\"Remove\");\n });\n\n it(\"Set up grouping custom UI\", async () => {\n // Arange\n const mockedUIComponent = (_props: GroupingCustomUIProps) => React.createElement(\"div\");\n const mockGroupingUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Grouping,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockGroupingUI];\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={jest.fn()}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have exactly 1 add method with given configuration\n const addCustom = screen.getAllByTestId(\"gmw-add-0\");\n expect(addCustom).toHaveLength(1);\n expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n // Each group should have a more icon button\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n expect(moreButton.length).toBeGreaterThan(0);\n\n // Click on first more icon\n await user.click(moreButton[0]);\n\n // Should have 2 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(2);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n\n // Hover on 'Edit'\n await user.hover(contextMenuItems[0]);\n\n // Should have exactly 1 sub menu item\n const editCustom = screen.getAllByTestId(`gmw-edit-0`);\n expect(editCustom).toHaveLength(1);\n expect(editCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n // Click on the edit custom UI\n await user.click(editCustom[0]);\n\n const groupName = screen.getAllByText(mockGroups.groups[0].groupName);\n expect(groupName).toHaveLength(1);\n });\n\n it(\"Set up context custom UI - should have add context menu\", async () => {\n // Arange\n const mockedUIComponent = (_props: ContextCustomUIProps) => React.createElement(\"div\");\n const mockContextUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Context,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockContextUI];\n const onClickRenderContextCustomUIMock = jest.fn();\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={onClickRenderContextCustomUIMock}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n\n // Should have the right group number\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should have 2 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(2);\n expect(contextMenuItems[0]).toHaveTextContent(mockContextUI.displayLabel);\n expect(contextMenuItems[1]).toHaveTextContent(\"Remove\");\n\n // Click on the context ui\n await user.click(contextMenuItems[0]);\n\n // Callback should have been called with correct parameters\n expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedUIComponent, mockGroups.groups[0]);\n });\n\n it(\"Set up both grouping and context custom UI\", async () => {\n // Arange\n const mockedGroupingUIComponent = (_props: GroupingCustomUIProps) => React.createElement(\"div\");\n const mockedContextUIComponent = (_props: ContextCustomUIProps) => React.createElement(\"div\");\n const mockGroupingUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Grouping,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedGroupingUIComponent,\n };\n const mockContextUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Context,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedContextUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockContextUI, mockGroupingUI];\n const onClickAddGroup = jest.fn();\n const onClickRenderContextCustomUIMock = jest.fn();\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={onClickAddGroup}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={onClickRenderContextCustomUIMock}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have exactly 1 add method with given configuration\n const addCustom = screen.getAllByTestId(\"gmw-add-0\");\n expect(addCustom).toHaveLength(1);\n expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n await user.click(addCustom[0]);\n\n // Callback should have been called with correct parameters\n expect(onClickAddGroup).toBeCalledWith(mockGroupingUI.name);\n\n // Check the group tile number\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should have 3 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n\n expect(contextMenuItems).toHaveLength(3);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n expect(contextMenuItems[1]).toHaveTextContent(mockContextUI.displayLabel);\n expect(contextMenuItems[2]).toHaveTextContent(\"Remove\");\n\n // Click on the context ui\n await user.click(contextMenuItems[1]);\n\n // Callback should have been called with correct parameters\n expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedContextUIComponent, mockGroups.groups[0]);\n });\n});\n"]}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import type { Store } from "redux";
|
|
3
|
-
import type { IModelConnection } from "@itwin/core-frontend";
|
|
4
2
|
import type { IMappingsClient } from "@itwin/insights-client";
|
|
5
3
|
import type { GroupingMappingCustomUI } from "../grouping-mapping-widget";
|
|
6
4
|
import * as moq from "typemoq";
|
|
@@ -65,8 +63,4 @@ declare function render(ui: React.ReactElement, mockUIs?: GroupingMappingCustomU
|
|
|
65
63
|
};
|
|
66
64
|
export * from "@testing-library/react";
|
|
67
65
|
export { render };
|
|
68
|
-
export declare class TestUtils {
|
|
69
|
-
static createAppStore(): Store;
|
|
70
|
-
static initializeUiFramework(_?: IModelConnection): Promise<void>;
|
|
71
|
-
}
|
|
72
66
|
//# sourceMappingURL=test-utils.d.ts.map
|
|
@@ -25,27 +25,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
25
25
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
26
26
|
};
|
|
27
27
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
-
exports.
|
|
28
|
+
exports.render = exports.mockMappingClient = exports.mockAccessToken = void 0;
|
|
29
29
|
/*---------------------------------------------------------------------------------------------
|
|
30
30
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
31
31
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
32
32
|
*--------------------------------------------------------------------------------------------*/
|
|
33
33
|
const React = __importStar(require("react"));
|
|
34
34
|
const react_1 = require("@testing-library/react");
|
|
35
|
-
const redux_1 = require("redux");
|
|
36
|
-
const appui_react_1 = require("@itwin/appui-react");
|
|
37
35
|
const user_event_1 = __importDefault(require("@testing-library/user-event"));
|
|
38
|
-
const GroupingApiConfigContext_1 = require("../widget/components/context/GroupingApiConfigContext");
|
|
39
|
-
const MappingClientContext_1 = require("../widget/components/context/MappingClientContext");
|
|
40
|
-
const GroupingMappingCustomUIContext_1 = require("../widget/components/context/GroupingMappingCustomUIContext");
|
|
41
36
|
const moq = __importStar(require("typemoq"));
|
|
37
|
+
const GroupingMappingContext_1 = require("../widget/components/GroupingMappingContext");
|
|
42
38
|
const mockAccessToken = async () => "Bearer eyJhbGci";
|
|
43
39
|
exports.mockAccessToken = mockAccessToken;
|
|
44
40
|
exports.mockMappingClient = moq.Mock.ofType();
|
|
45
41
|
function render(ui, mockUIs = [], { ...options } = {}) {
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
const contextProps = {
|
|
43
|
+
getAccessToken: exports.mockAccessToken,
|
|
44
|
+
iModelId: "mock",
|
|
45
|
+
customUIs: mockUIs,
|
|
46
|
+
};
|
|
47
|
+
const Wrapper = ({ children }) => (React.createElement(GroupingMappingContext_1.GroupingMappingContext, { ...contextProps }, children));
|
|
49
48
|
return {
|
|
50
49
|
user: user_event_1.default.setup(),
|
|
51
50
|
...react_1.render(ui, { wrapper: Wrapper, ...options }),
|
|
@@ -53,19 +52,4 @@ function render(ui, mockUIs = [], { ...options } = {}) {
|
|
|
53
52
|
}
|
|
54
53
|
exports.render = render;
|
|
55
54
|
__exportStar(require("@testing-library/react"), exports);
|
|
56
|
-
class TestUtils {
|
|
57
|
-
static createAppStore() {
|
|
58
|
-
const rootReducer = redux_1.combineReducers({
|
|
59
|
-
frameworkState: appui_react_1.FrameworkReducer,
|
|
60
|
-
});
|
|
61
|
-
return redux_1.createStore(rootReducer, window.__REDUX_DEVTOOLS_EXTENSION__ &&
|
|
62
|
-
window.__REDUX_DEVTOOLS_EXTENSION__());
|
|
63
|
-
}
|
|
64
|
-
static async initializeUiFramework(_) {
|
|
65
|
-
const store = this.createAppStore();
|
|
66
|
-
await appui_react_1.UiFramework.initialize(store);
|
|
67
|
-
appui_react_1.SyncUiEventDispatcher.setTimeoutPeriod(0); // disables non-immediate event processing.
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
exports.TestUtils = TestUtils;
|
|
71
55
|
//# sourceMappingURL=test-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../../src/test/test-utils.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,6CAA+B;AAC/B,kDAA6D;
|
|
1
|
+
{"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../../src/test/test-utils.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,6CAA+B;AAC/B,kDAA6D;AAC7D,6EAAoD;AAGpD,6CAA+B;AAE/B,wFAAqF;AAE9E,MAAM,eAAe,GAAG,KAAK,IAAI,EAAE,CAAC,iBAAiB,CAAC;AAAhD,QAAA,eAAe,mBAAiC;AAChD,QAAA,iBAAiB,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAmB,CAAC;AAMpE,SAAS,MAAM,CAAC,EAAsB,EAAE,UAAqC,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE;IAClG,MAAM,YAAY,GAAgC;QAChD,cAAc,EAAE,uBAAe;QAC/B,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,OAAO;KACnB,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,EAAE,QAAQ,EAAgB,EAAE,EAAE,CAAC,CAC9C,oBAAC,+CAAsB,OAAK,YAAY,IACrC,QAAQ,CACc,CAC1B,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,oBAAS,CAAC,KAAK,EAAE;QACvB,GAAG,cAAS,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;KACnD,CAAC;AACJ,CAAC;AAIQ,wBAAM;AAFf,yDAAuC","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 * as React from \"react\";\nimport { render as rtlRender } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport type { IMappingsClient } from \"@itwin/insights-client\";\nimport type { GroupingMappingCustomUI } from \"../grouping-mapping-widget\";\nimport * as moq from \"typemoq\";\nimport type { GroupingMappingContextProps } from \"../widget/components/GroupingMappingContext\";\nimport { GroupingMappingContext } from \"../widget/components/GroupingMappingContext\";\n\nexport const mockAccessToken = async () => \"Bearer eyJhbGci\";\nexport const mockMappingClient = moq.Mock.ofType<IMappingsClient>();\n\ninterface WrapperProps {\n children?: React.ReactNode;\n}\n\nfunction render(ui: React.ReactElement, mockUIs: GroupingMappingCustomUI[] = [], { ...options } = {}) {\n const contextProps: GroupingMappingContextProps = {\n getAccessToken: mockAccessToken,\n iModelId: \"mock\",\n customUIs: mockUIs,\n };\n const Wrapper = ({ children }: WrapperProps) => (\n <GroupingMappingContext {...contextProps}>\n {children}\n </GroupingMappingContext>\n );\n\n return {\n user: userEvent.setup(),\n ...rtlRender(ui, { wrapper: Wrapper, ...options }),\n };\n}\n\nexport * from \"@testing-library/react\";\n// override React Testing Library's render with our own\nexport { render };\n"]}
|
|
@@ -33,7 +33,7 @@ const ActionPanel = ({ onSave, onCancel, isCancelDisabled = false, isSavingDisab
|
|
|
33
33
|
isLoading &&
|
|
34
34
|
React.createElement(utils_1.LoadingSpinner, null),
|
|
35
35
|
React.createElement(itwinui_react_1.Button, { disabled: isSavingDisabled || isLoading, styleType: 'high-visibility', id: 'save-app', onClick: onSave }, "Save"),
|
|
36
|
-
React.createElement(itwinui_react_1.Button, { styleType: 'default', type: 'button', id: 'cancel', onClick: onCancel, disabled: isCancelDisabled || isLoading }, "Cancel"))));
|
|
36
|
+
onCancel && React.createElement(itwinui_react_1.Button, { styleType: 'default', type: 'button', id: 'cancel', onClick: onCancel, disabled: isCancelDisabled || isLoading }, "Cancel"))));
|
|
37
37
|
};
|
|
38
38
|
exports.default = ActionPanel;
|
|
39
39
|
//# sourceMappingURL=ActionPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionPanel.js","sourceRoot":"","sources":["../../../../src/widget/components/ActionPanel.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,wDAA8C;AAC9C,6CAA+B;AAC/B,8BAA4B;AAC5B,mCAAyC;AAUzC,MAAM,WAAW,GAAG,CAAC,EACnB,MAAM,EACN,QAAQ,EACR,gBAAgB,GAAG,KAAK,EACxB,gBAAgB,GAAG,KAAK,EACxB,SAAS,GAAG,KAAK,GACA,EAAe,EAAE;IAClC,OAAO,CACL,6BAAK,EAAE,EAAC,QAAQ,EAAC,SAAS,EAAC,4BAA4B;QACrD,6BAAK,SAAS,EAAC,kBAAkB;YAC9B,SAAS;gBACR,oBAAC,sBAAc,OAAG;YAEpB,oBAAC,sBAAM,IACL,QAAQ,EAAE,gBAAgB,IAAI,SAAS,EACvC,SAAS,EAAC,iBAAiB,EAC3B,EAAE,EAAC,UAAU,EACb,OAAO,EAAE,MAAM,WAGR;
|
|
1
|
+
{"version":3,"file":"ActionPanel.js","sourceRoot":"","sources":["../../../../src/widget/components/ActionPanel.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,wDAA8C;AAC9C,6CAA+B;AAC/B,8BAA4B;AAC5B,mCAAyC;AAUzC,MAAM,WAAW,GAAG,CAAC,EACnB,MAAM,EACN,QAAQ,EACR,gBAAgB,GAAG,KAAK,EACxB,gBAAgB,GAAG,KAAK,EACxB,SAAS,GAAG,KAAK,GACA,EAAe,EAAE;IAClC,OAAO,CACL,6BAAK,EAAE,EAAC,QAAQ,EAAC,SAAS,EAAC,4BAA4B;QACrD,6BAAK,SAAS,EAAC,kBAAkB;YAC9B,SAAS;gBACR,oBAAC,sBAAc,OAAG;YAEpB,oBAAC,sBAAM,IACL,QAAQ,EAAE,gBAAgB,IAAI,SAAS,EACvC,SAAS,EAAC,iBAAiB,EAC3B,EAAE,EAAC,UAAU,EACb,OAAO,EAAE,MAAM,WAGR;YACR,QAAQ,IAAI,oBAAC,sBAAM,IAClB,SAAS,EAAC,SAAS,EACnB,IAAI,EAAC,QAAQ,EACb,EAAE,EAAC,QAAQ,EACX,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,gBAAgB,IAAI,SAAS,aAGhC,CACL,CACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,WAAW,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 { Button } from \"@itwin/itwinui-react\";\nimport * as React from \"react\";\nimport \"./ActionPanel.scss\";\nimport { LoadingSpinner } from \"./utils\";\n\nexport interface ActionPanelProps {\n onSave: () => void;\n onCancel?: () => void;\n isCancelDisabled?: boolean;\n isSavingDisabled?: boolean;\n isLoading?: boolean;\n}\n\nconst ActionPanel = ({\n onSave,\n onCancel,\n isCancelDisabled = false,\n isSavingDisabled = false,\n isLoading = false,\n}: ActionPanelProps): JSX.Element => {\n return (\n <div id='action' className='gmw-action-panel-container'>\n <div className='gmw-action-panel'>\n {isLoading &&\n <LoadingSpinner />\n }\n <Button\n disabled={isSavingDisabled || isLoading}\n styleType='high-visibility'\n id='save-app'\n onClick={onSave}\n >\n Save\n </Button>\n {onCancel && <Button\n styleType='default'\n type='button'\n id='cancel'\n onClick={onCancel}\n disabled={isCancelDisabled || isLoading}\n >\n Cancel\n </Button>}\n </div>\n </div>\n );\n};\n\nexport default ActionPanel;\n"]}
|