@itwin/grouping-mapping-widget 0.15.0 → 0.16.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 (62) hide show
  1. package/README.md +1 -1
  2. package/lib/cjs/widget/GroupingMappingWidget.d.ts +3 -3
  3. package/lib/cjs/widget/GroupingMappingWidget.js +5 -6
  4. package/lib/cjs/widget/GroupingMappingWidget.js.map +1 -1
  5. package/lib/cjs/widget/components/GroupPropertyAction.js +4 -6
  6. package/lib/cjs/widget/components/GroupPropertyAction.js.map +1 -1
  7. package/lib/cjs/widget/components/Mapping.d.ts +7 -0
  8. package/lib/cjs/widget/components/Mapping.js +7 -0
  9. package/lib/cjs/widget/components/Mapping.js.map +1 -1
  10. package/lib/cjs/widget/components/MappingImportWizardModal.d.ts +7 -0
  11. package/lib/cjs/widget/components/MappingImportWizardModal.js +38 -20
  12. package/lib/cjs/widget/components/MappingImportWizardModal.js.map +1 -1
  13. package/lib/cjs/widget/components/MappingImportWizardModal.scss +8 -1
  14. package/lib/cjs/widget/components/SelectIModel.d.ts +9 -4
  15. package/lib/cjs/widget/components/SelectIModel.js +71 -16
  16. package/lib/cjs/widget/components/SelectIModel.js.map +1 -1
  17. package/lib/cjs/widget/components/SelectIModel.scss +2 -2
  18. package/lib/cjs/widget/components/SelectITwin.d.ts +18 -0
  19. package/lib/cjs/widget/components/SelectITwin.js +115 -0
  20. package/lib/cjs/widget/components/SelectITwin.js.map +1 -0
  21. package/lib/{esm/widget/components/SelectProject.scss → cjs/widget/components/SelectITwin.scss} +6 -16
  22. package/lib/cjs/widget/components/SelectMapping.scss +1 -2
  23. package/lib/cjs/widget/components/context/IModelsClientContext.d.ts +7 -0
  24. package/lib/cjs/widget/components/context/IModelsClientContext.js +32 -0
  25. package/lib/cjs/widget/components/context/IModelsClientContext.js.map +1 -0
  26. package/lib/cjs/widget/components/context/ITwinsClientContext.d.ts +7 -0
  27. package/lib/cjs/widget/components/context/ITwinsClientContext.js +31 -0
  28. package/lib/cjs/widget/components/context/ITwinsClientContext.js.map +1 -0
  29. package/lib/esm/widget/GroupingMappingWidget.d.ts +3 -3
  30. package/lib/esm/widget/GroupingMappingWidget.js +4 -5
  31. package/lib/esm/widget/GroupingMappingWidget.js.map +1 -1
  32. package/lib/esm/widget/components/GroupPropertyAction.js +4 -6
  33. package/lib/esm/widget/components/GroupPropertyAction.js.map +1 -1
  34. package/lib/esm/widget/components/Mapping.d.ts +7 -0
  35. package/lib/esm/widget/components/Mapping.js +7 -0
  36. package/lib/esm/widget/components/Mapping.js.map +1 -1
  37. package/lib/esm/widget/components/MappingImportWizardModal.d.ts +7 -0
  38. package/lib/esm/widget/components/MappingImportWizardModal.js +38 -20
  39. package/lib/esm/widget/components/MappingImportWizardModal.js.map +1 -1
  40. package/lib/esm/widget/components/MappingImportWizardModal.scss +8 -1
  41. package/lib/esm/widget/components/SelectIModel.d.ts +9 -4
  42. package/lib/esm/widget/components/SelectIModel.js +73 -18
  43. package/lib/esm/widget/components/SelectIModel.js.map +1 -1
  44. package/lib/esm/widget/components/SelectIModel.scss +2 -2
  45. package/lib/esm/widget/components/SelectITwin.d.ts +18 -0
  46. package/lib/esm/widget/components/SelectITwin.js +94 -0
  47. package/lib/esm/widget/components/SelectITwin.js.map +1 -0
  48. package/lib/{cjs/widget/components/SelectProject.scss → esm/widget/components/SelectITwin.scss} +6 -16
  49. package/lib/esm/widget/components/SelectMapping.scss +1 -2
  50. package/lib/esm/widget/components/context/IModelsClientContext.d.ts +7 -0
  51. package/lib/esm/widget/components/context/IModelsClientContext.js +27 -0
  52. package/lib/esm/widget/components/context/IModelsClientContext.js.map +1 -0
  53. package/lib/esm/widget/components/context/ITwinsClientContext.d.ts +7 -0
  54. package/lib/esm/widget/components/context/ITwinsClientContext.js +26 -0
  55. package/lib/esm/widget/components/context/ITwinsClientContext.js.map +1 -0
  56. package/package.json +31 -30
  57. package/lib/cjs/widget/components/SelectProject.d.ts +0 -10
  58. package/lib/cjs/widget/components/SelectProject.js +0 -86
  59. package/lib/cjs/widget/components/SelectProject.js.map +0 -1
  60. package/lib/esm/widget/components/SelectProject.d.ts +0 -10
  61. package/lib/esm/widget/components/SelectProject.js +0 -65
  62. package/lib/esm/widget/components/SelectProject.js.map +0 -1
@@ -19,26 +19,81 @@ var __importStar = (this && this.__importStar) || function (mod) {
19
19
  return result;
20
20
  };
21
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
- const imodel_browser_react_1 = require("@itwin/imodel-browser-react");
23
22
  const itwinui_react_1 = require("@itwin/itwinui-react");
24
23
  const react_1 = __importStar(require("react"));
25
- const GroupingApiConfigContext_1 = require("./context/GroupingApiConfigContext");
26
24
  require("./SelectIModel.scss");
27
- const SelectIModel = ({ projectId, onSelect, onCancel, backFn, }) => {
28
- const { getAccessToken, prefix } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
29
- const [accessToken, setAccessToken] = react_1.useState();
30
- const [apiOverrides, setApiOverrides] = react_1.useState(() => ({ serverEnvironmentPrefix: prefix }));
31
- react_1.useEffect(() => setApiOverrides(() => ({ serverEnvironmentPrefix: prefix })), [prefix]);
25
+ const GroupingApiConfigContext_1 = require("./context/GroupingApiConfigContext");
26
+ const IModelsClientContext_1 = require("./context/IModelsClientContext");
27
+ const utils_1 = require("./utils");
28
+ const defaultDisplayStrings = {
29
+ iModels: "iModels",
30
+ iModelName: "Name",
31
+ iModelDescription: "Description",
32
+ };
33
+ const fetchIModels = async (setIModels, setIsLoading, getAccessToken, iTwinId, iModelsClient) => {
34
+ try {
35
+ setIModels([]);
36
+ setIsLoading(true);
37
+ const iModelIterator = iModelsClient.iModels.getRepresentationList({
38
+ authorization: async () => {
39
+ const token = await getAccessToken();
40
+ const splitToken = token.split(" ");
41
+ return {
42
+ scheme: splitToken[0],
43
+ token: splitToken[1],
44
+ };
45
+ },
46
+ urlParams: {
47
+ iTwinId,
48
+ },
49
+ });
50
+ const iModels = [];
51
+ for await (const iModel of iModelIterator) {
52
+ iModels.push(iModel);
53
+ }
54
+ setIModels(iModels);
55
+ }
56
+ catch (error) {
57
+ utils_1.handleError(error.status);
58
+ }
59
+ finally {
60
+ setIsLoading(false);
61
+ }
62
+ };
63
+ const SelectIModel = ({ iTwinId: iTwinId, onSelect, onCancel, backFn, displayStrings: userDisplayStrings, }) => {
64
+ const { getAccessToken } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
65
+ const iModelsClient = IModelsClientContext_1.useIModelsClient();
66
+ const [isLoading, setIsLoading] = react_1.useState(true);
67
+ const [iModels, setIModels] = react_1.useState([]);
32
68
  react_1.useEffect(() => {
33
- const fetchAccessToken = async () => {
34
- const accessToken = await getAccessToken();
35
- setAccessToken(accessToken);
36
- };
37
- void fetchAccessToken();
38
- }, [getAccessToken]);
39
- return (react_1.default.createElement("div", { className: 'gmw-imodel-grid-container' },
40
- react_1.default.createElement("div", { className: 'gmw-imodel-grid' },
41
- react_1.default.createElement(imodel_browser_react_1.IModelGrid, { projectId: projectId, onThumbnailClick: onSelect, accessToken: accessToken, apiOverrides: apiOverrides })),
69
+ void fetchIModels(setIModels, setIsLoading, getAccessToken, iTwinId, iModelsClient);
70
+ }, [getAccessToken, iModelsClient, setIsLoading, iTwinId]);
71
+ const displayStrings = react_1.default.useMemo(() => ({ ...defaultDisplayStrings, ...userDisplayStrings }), [userDisplayStrings]);
72
+ const iModelsColumns = react_1.useMemo(() => [
73
+ {
74
+ Header: "Table",
75
+ columns: [
76
+ {
77
+ id: "iModelName",
78
+ Header: `${displayStrings.iModelName}`,
79
+ accessor: "name",
80
+ Filter: itwinui_react_1.tableFilters.TextFilter(),
81
+ },
82
+ {
83
+ id: "iModelDescription",
84
+ Header: `${displayStrings.iModelDescription}`,
85
+ accessor: "description",
86
+ Filter: itwinui_react_1.tableFilters.TextFilter(),
87
+ },
88
+ ],
89
+ },
90
+ ], [displayStrings.iModelName, displayStrings.iModelDescription]);
91
+ const pageSizeList = react_1.useMemo(() => [10, 25, 50], []);
92
+ const paginator = react_1.useCallback((props) => (react_1.default.createElement(itwinui_react_1.TablePaginator, { ...props, pageSizeList: pageSizeList })), [pageSizeList]);
93
+ return (react_1.default.createElement("div", { className: 'gmw-select-imodel-table-container' },
94
+ react_1.default.createElement(itwinui_react_1.Table, { data: iModels, columns: iModelsColumns, className: 'gmw-select-imodel-table', emptyTableContent: `No ${displayStrings.iModels} available.`, isSortable: true, isLoading: isLoading, onRowClick: (_, row) => {
95
+ onSelect(row.original.id);
96
+ }, paginatorRenderer: paginator }),
42
97
  react_1.default.createElement("div", { className: 'gmw-import-action-panel' },
43
98
  react_1.default.createElement(itwinui_react_1.Button, { onClick: backFn }, "Back"),
44
99
  react_1.default.createElement(itwinui_react_1.Button, { onClick: onCancel }, "Cancel"))));
@@ -1 +1 @@
1
- {"version":3,"file":"SelectIModel.js","sourceRoot":"","sources":["../../../../src/widget/components/SelectIModel.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AASA,sEAEqC;AACrC,wDAA8C;AAC9C,+CAAmD;AACnD,iFAAiF;AACjF,+BAA6B;AAQ7B,MAAM,YAAY,GAAG,CAAC,EACpB,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,MAAM,GACY,EAAE,EAAE;IACtB,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,sDAA2B,EAAE,CAAC;IACjE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,gBAAQ,EAAe,CAAC;IAC9D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,gBAAQ,CAC9C,GAAG,EAAE,CAAC,CAAC,EAAE,uBAAuB,EAAE,MAAM,EAAE,CAAC,CAC5C,CAAC;IAEF,iBAAS,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,uBAAuB,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAExF,iBAAS,CAAC,GAAG,EAAE;QACb,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;YAClC,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;YAC3C,cAAc,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC,CAAC;QACF,KAAK,gBAAgB,EAAE,CAAC;IAC1B,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,OAAO,CACL,uCAAK,SAAS,EAAC,2BAA2B;QACxC,uCAAK,SAAS,EAAC,iBAAiB;YAC9B,8BAAC,iCAAU,IACT,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,QAAQ,EAC1B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,GAC1B,CACE;QACN,uCAAK,SAAS,EAAC,yBAAyB;YACtC,8BAAC,sBAAM,IAAC,OAAO,EAAE,MAAM,WAAe;YACtC,8BAAC,sBAAM,IAAC,OAAO,EAAE,QAAQ,aAAiB,CACtC,CACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,YAAY,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 type { AccessToken } from \"@itwin/core-bentley\";\nimport type {\n ApiOverrides,\n IModelFull,\n} from \"@itwin/imodel-browser-react\";\nimport {\n IModelGrid,\n} from \"@itwin/imodel-browser-react\";\nimport { Button } from \"@itwin/itwinui-react\";\nimport React, { useEffect, useState } from \"react\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport \"./SelectIModel.scss\";\n\ninterface SelectIModelProps {\n projectId: string;\n onSelect: (project: IModelFull) => void;\n onCancel: () => void;\n backFn: () => void;\n}\nconst SelectIModel = ({\n projectId,\n onSelect,\n onCancel,\n backFn,\n}: SelectIModelProps) => {\n const { getAccessToken, prefix } = useGroupingMappingApiConfig();\n const [accessToken, setAccessToken] = useState<AccessToken>();\n const [apiOverrides, setApiOverrides] = useState<ApiOverrides<IModelFull[]>>(\n () => ({ serverEnvironmentPrefix: prefix })\n );\n\n useEffect(() => setApiOverrides(() => ({ serverEnvironmentPrefix: prefix })), [prefix]);\n\n useEffect(() => {\n const fetchAccessToken = async () => {\n const accessToken = await getAccessToken();\n setAccessToken(accessToken);\n };\n void fetchAccessToken();\n }, [getAccessToken]);\n\n return (\n <div className='gmw-imodel-grid-container'>\n <div className='gmw-imodel-grid'>\n <IModelGrid\n projectId={projectId}\n onThumbnailClick={onSelect}\n accessToken={accessToken}\n apiOverrides={apiOverrides}\n />\n </div>\n <div className='gmw-import-action-panel'>\n <Button onClick={backFn}>Back</Button>\n <Button onClick={onCancel}>Cancel</Button>\n </div>\n </div>\n );\n};\n\nexport default SelectIModel;\n"]}
1
+ {"version":3,"file":"SelectIModel.js","sourceRoot":"","sources":["../../../../src/widget/components/SelectIModel.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 type { EntityListIterator, IModel, IModelsClient } from \"@itwin/imodels-client-management\";\nimport type { TablePaginatorRendererProps } from \"@itwin/itwinui-react\";\nimport { Button, Table, tableFilters, TablePaginator } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport \"./SelectIModel.scss\";\nimport type { GetAccessTokenFn } from \"./context/GroupingApiConfigContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useIModelsClient } from \"./context/IModelsClientContext\";\nimport { handleError } from \"./utils\";\n\ntype IIModelTyped = CreateTypeFromInterface<IModel>;\n\nconst defaultDisplayStrings = {\n iModels: \"iModels\",\n iModelName: \"Name\",\n iModelDescription: \"Description\",\n};\n\nconst fetchIModels = async (\n setIModels: (iModels: IModel[]) => void,\n setIsLoading: (isLoading: boolean) => void,\n getAccessToken: GetAccessTokenFn,\n iTwinId: string,\n iModelsClient: IModelsClient,\n) => {\n try {\n setIModels([]);\n setIsLoading(true);\n const iModelIterator: EntityListIterator<IModel> = iModelsClient.iModels.getRepresentationList({\n authorization: async () => {\n const token = await getAccessToken();\n const splitToken = token.split(\" \");\n return {\n scheme: splitToken[0],\n token: splitToken[1],\n };\n },\n urlParams: {\n iTwinId,\n },\n });\n const iModels: IModel[] = [];\n for await (const iModel of iModelIterator) {\n iModels.push(iModel);\n }\n setIModels(iModels);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\ninterface SelectIModelProps {\n iTwinId: string;\n onSelect: (iModelId: string) => void;\n onCancel: () => void;\n backFn: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\nconst SelectIModel = ({\n iTwinId: iTwinId,\n onSelect,\n onCancel,\n backFn,\n displayStrings: userDisplayStrings,\n}: SelectIModelProps) => {\n const { getAccessToken } = useGroupingMappingApiConfig();\n const iModelsClient = useIModelsClient();\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [iModels, setIModels] = useState<IModel[]>([]);\n\n useEffect(() => {\n void fetchIModels(setIModels, setIsLoading, getAccessToken, iTwinId, iModelsClient);\n }, [getAccessToken, iModelsClient, setIsLoading, iTwinId]);\n\n const displayStrings = React.useMemo(\n () => ({ ...defaultDisplayStrings, ...userDisplayStrings }),\n [userDisplayStrings]\n );\n\n const iModelsColumns = useMemo(\n () => [\n {\n Header: \"Table\",\n columns: [\n {\n id: \"iModelName\",\n Header: `${displayStrings.iModelName}`,\n accessor: \"name\",\n Filter: tableFilters.TextFilter(),\n },\n {\n id: \"iModelDescription\",\n Header: `${displayStrings.iModelDescription}`,\n accessor: \"description\",\n Filter: tableFilters.TextFilter(),\n },\n ],\n },\n ],\n [displayStrings.iModelName, displayStrings.iModelDescription]\n );\n\n const pageSizeList = useMemo(() => [10, 25, 50], []);\n const paginator = useCallback(\n (props: TablePaginatorRendererProps) => (\n <TablePaginator {...props} pageSizeList={pageSizeList} />\n ),\n [pageSizeList]\n );\n\n return (\n <div className='gmw-select-imodel-table-container'>\n <Table<IIModelTyped>\n data={iModels}\n columns={iModelsColumns}\n className='gmw-select-imodel-table'\n emptyTableContent={`No ${displayStrings.iModels} available.`}\n isSortable\n isLoading={isLoading}\n onRowClick={(_, row) => {\n onSelect(row.original.id);\n }}\n paginatorRenderer={paginator}\n />\n <div className='gmw-import-action-panel'>\n <Button onClick={backFn}>Back</Button>\n <Button onClick={onCancel}>Cancel</Button>\n </div>\n </div>\n );\n};\n\nexport default SelectIModel;\n"]}
@@ -4,13 +4,13 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  @import '~@itwin/itwinui-css/scss/variables';
6
6
 
7
- .gmw-imodel-grid-container {
7
+ .gmw-select-imodel-table-container {
8
8
  display: flex;
9
9
  flex-direction: column;
10
10
  flex-grow: 1;
11
11
  min-height: 0;
12
12
 
13
- .gmw-imodel-grid {
13
+ .gmw-select-imodel-table {
14
14
  overflow: auto;
15
15
  flex-grow: 1;
16
16
  }
@@ -0,0 +1,18 @@
1
+ /// <reference types="react" />
2
+ import "./SelectITwin.scss";
3
+ declare const defaultDisplayStrings: {
4
+ iTwins: string;
5
+ iTwinNumber: string;
6
+ iTwinName: string;
7
+ iTwinStatus: string;
8
+ };
9
+ interface SelectITwinProps {
10
+ onSelect: (iTwinId: string) => void;
11
+ onCancel: () => void;
12
+ onChangeITwinType: (iTwinType: number) => void;
13
+ displayStrings?: Partial<typeof defaultDisplayStrings>;
14
+ defaultITwinType?: number;
15
+ }
16
+ declare const SelectITwin: ({ onSelect, onCancel, onChangeITwinType, displayStrings: userDisplayStrings, defaultITwinType, }: SelectITwinProps) => JSX.Element;
17
+ export default SelectITwin;
18
+ //# sourceMappingURL=SelectITwin.d.ts.map
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ const itwins_client_1 = require("@itwin/itwins-client");
23
+ const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
24
+ const itwinui_react_1 = require("@itwin/itwinui-react");
25
+ const react_1 = __importStar(require("react"));
26
+ require("./SelectITwin.scss");
27
+ const GroupingApiConfigContext_1 = require("./context/GroupingApiConfigContext");
28
+ const ITwinsClientContext_1 = require("./context/ITwinsClientContext");
29
+ const utils_1 = require("./utils");
30
+ const defaultDisplayStrings = {
31
+ iTwins: "iTwins",
32
+ iTwinNumber: "Number",
33
+ iTwinName: "Name",
34
+ iTwinStatus: "Status",
35
+ };
36
+ const tabsWithIcons = [
37
+ react_1.default.createElement(itwinui_react_1.Tab, { key: "favorite", label: "Favorite iTwins", startIcon: react_1.default.createElement(itwinui_icons_react_1.SvgStarHollow, null) }),
38
+ react_1.default.createElement(itwinui_react_1.Tab, { key: "recents", label: "Recent iTwins", startIcon: react_1.default.createElement(itwinui_icons_react_1.SvgCalendar, null) }),
39
+ react_1.default.createElement(itwinui_react_1.Tab, { key: "all", label: "My iTwins", startIcon: react_1.default.createElement(itwinui_icons_react_1.SvgList, null) }),
40
+ ];
41
+ const fetchITwins = async (setITwins, setIsLoading, getAccessToken, iTwinsClient, iTwinType) => {
42
+ try {
43
+ setITwins([]);
44
+ setIsLoading(true);
45
+ const accessToken = await getAccessToken();
46
+ let iTwinsResponse;
47
+ switch (iTwinType) {
48
+ case 0:
49
+ iTwinsResponse = await iTwinsClient.queryFavoritesAsync(accessToken, itwins_client_1.ITwinSubClass.Project);
50
+ break;
51
+ case 1:
52
+ iTwinsResponse = await iTwinsClient.queryRecentsAsync(accessToken, itwins_client_1.ITwinSubClass.Project);
53
+ break;
54
+ default:
55
+ iTwinsResponse = await iTwinsClient.queryAsync(accessToken, itwins_client_1.ITwinSubClass.Project);
56
+ }
57
+ setITwins(iTwinsResponse.data);
58
+ }
59
+ catch (error) {
60
+ utils_1.handleError(error.status);
61
+ }
62
+ finally {
63
+ setIsLoading(false);
64
+ }
65
+ };
66
+ const SelectITwin = ({ onSelect, onCancel, onChangeITwinType, displayStrings: userDisplayStrings, defaultITwinType = 0, }) => {
67
+ const { getAccessToken } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
68
+ const iTwinsClient = ITwinsClientContext_1.useITwinsClient();
69
+ const [isLoading, setIsLoading] = react_1.useState(true);
70
+ const [iTwins, setITwins] = react_1.useState([]);
71
+ const [iTwinType, setITwinType] = react_1.useState(defaultITwinType);
72
+ react_1.useEffect(() => {
73
+ void fetchITwins(setITwins, setIsLoading, getAccessToken, iTwinsClient, iTwinType);
74
+ }, [getAccessToken, iTwinsClient, setIsLoading, iTwinType]);
75
+ const displayStrings = react_1.default.useMemo(() => ({ ...defaultDisplayStrings, ...userDisplayStrings }), [userDisplayStrings]);
76
+ const iTwinsColumns = react_1.useMemo(() => [
77
+ {
78
+ Header: "Table",
79
+ columns: [
80
+ {
81
+ id: "iTwinNumber",
82
+ Header: `${displayStrings.iTwinNumber}`,
83
+ accessor: "number",
84
+ Filter: itwinui_react_1.tableFilters.TextFilter(),
85
+ },
86
+ {
87
+ id: "iTwinName",
88
+ Header: `${displayStrings.iTwinName}`,
89
+ accessor: "displayName",
90
+ Filter: itwinui_react_1.tableFilters.TextFilter(),
91
+ },
92
+ {
93
+ id: "iTwinStatus",
94
+ Header: `${displayStrings.iTwinStatus}`,
95
+ accessor: "status",
96
+ Filter: itwinui_react_1.tableFilters.TextFilter(),
97
+ },
98
+ ],
99
+ },
100
+ ], [displayStrings.iTwinNumber, displayStrings.iTwinName, displayStrings.iTwinStatus]);
101
+ const pageSizeList = react_1.useMemo(() => [10, 25, 50], []);
102
+ const paginator = react_1.useCallback((props) => (react_1.default.createElement(itwinui_react_1.TablePaginator, { ...props, pageSizeList: pageSizeList })), [pageSizeList]);
103
+ return (react_1.default.createElement("div", { className: "gmw-select-itwin-table-container" },
104
+ react_1.default.createElement(itwinui_react_1.HorizontalTabs, { labels: tabsWithIcons, onTabSelected: (type) => {
105
+ onChangeITwinType(type);
106
+ setITwinType(type);
107
+ }, activeIndex: iTwinType, type: "borderless", contentClassName: "gmw-table-holding-tab" }),
108
+ react_1.default.createElement(itwinui_react_1.Table, { data: iTwins, columns: iTwinsColumns, className: 'gmw-select-itwin-table', emptyTableContent: `No ${displayStrings.iTwins} available.`, isSortable: true, isLoading: isLoading, onRowClick: (_, row) => {
109
+ onSelect(row.original.id);
110
+ }, paginatorRenderer: paginator }),
111
+ react_1.default.createElement("div", { className: "gmw-import-action-panel" },
112
+ react_1.default.createElement(itwinui_react_1.Button, { onClick: onCancel }, "Cancel"))));
113
+ };
114
+ exports.default = SelectITwin;
115
+ //# sourceMappingURL=SelectITwin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectITwin.js","sourceRoot":"","sources":["../../../../src/widget/components/SelectITwin.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAKA,wDAAqD;AACrD,oEAAiF;AAEjF,wDAAwG;AACxG,+CAAyE;AAEzE,8BAA4B;AAE5B,iFAAiF;AACjF,uEAAgE;AAChE,mCAAsC;AAItC,MAAM,qBAAqB,GAAG;IAC5B,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,QAAQ;IACrB,SAAS,EAAE,MAAM;IACjB,WAAW,EAAE,QAAQ;CACtB,CAAC;AAEF,MAAM,aAAa,GAAG;IACpB,8BAAC,mBAAG,IAAC,GAAG,EAAC,UAAU,EAAC,KAAK,EAAC,iBAAiB,EAAC,SAAS,EAAE,8BAAC,mCAAa,OAAG,GAAI;IAC5E,8BAAC,mBAAG,IAAC,GAAG,EAAC,SAAS,EAAC,KAAK,EAAC,eAAe,EAAC,SAAS,EAAE,8BAAC,iCAAW,OAAG,GAAI;IACvE,8BAAC,mBAAG,IAAC,GAAG,EAAC,KAAK,EAAC,KAAK,EAAC,WAAW,EAAC,SAAS,EAAE,8BAAC,6BAAO,OAAG,GAAI;CAC5D,CAAC;AAEF,MAAM,WAAW,GAAG,KAAK,EACvB,SAAoC,EACpC,YAA0C,EAC1C,cAAgC,EAChC,YAAgC,EAChC,SAAiB,EACjB,EAAE;IACF,IAAI;QACF,SAAS,CAAC,EAAE,CAAC,CAAC;QACd,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;QAC3C,IAAI,cAA0C,CAAC;QAC/C,QAAQ,SAAS,EAAE;YACjB,KAAK,CAAC;gBACJ,cAAc,GAAG,MAAM,YAAY,CAAC,mBAAmB,CAAC,WAAW,EAAE,6BAAa,CAAC,OAAO,CAAC,CAAC;gBAC5F,MAAM;YACR,KAAK,CAAC;gBACJ,cAAc,GAAG,MAAM,YAAY,CAAC,iBAAiB,CAAC,WAAW,EAAE,6BAAa,CAAC,OAAO,CAAC,CAAC;gBAC1F,MAAM;YACR;gBACE,cAAc,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,WAAW,EAAE,6BAAa,CAAC,OAAO,CAAC,CAAC;SACtF;QACD,SAAS,CAAC,cAAc,CAAC,IAAK,CAAC,CAAC;KACjC;IAAC,OAAO,KAAU,EAAE;QACnB,mBAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KAC3B;YAAS;QACR,YAAY,CAAC,KAAK,CAAC,CAAC;KACrB;AACH,CAAC,CAAC;AASF,MAAM,WAAW,GAAG,CAAC,EACnB,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,cAAc,EAAE,kBAAkB,EAClC,gBAAgB,GAAG,CAAC,GACH,EAAE,EAAE;IACrB,MAAM,EAAE,cAAc,EAAE,GAAG,sDAA2B,EAAE,CAAC;IACzD,MAAM,YAAY,GAAG,qCAAe,EAAE,CAAC;IACvC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,gBAAQ,CAAU,IAAI,CAAC,CAAC;IAC1D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,gBAAQ,CAAU,EAAE,CAAC,CAAC;IAClD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,gBAAQ,CAAS,gBAAgB,CAAC,CAAC;IAErE,iBAAS,CAAC,GAAG,EAAE;QACb,KAAK,WAAW,CAAC,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IACrF,CAAC,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;IAE5D,MAAM,cAAc,GAAG,eAAK,CAAC,OAAO,CAClC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,qBAAqB,EAAE,GAAG,kBAAkB,EAAE,CAAC,EAC3D,CAAC,kBAAkB,CAAC,CACrB,CAAC;IAEF,MAAM,aAAa,GAAG,eAAO,CAC3B,GAAG,EAAE,CAAC;QACJ;YACE,MAAM,EAAE,OAAO;YACf,OAAO,EAAE;gBACP;oBACE,EAAE,EAAE,aAAa;oBACjB,MAAM,EAAE,GAAG,cAAc,CAAC,WAAW,EAAE;oBACvC,QAAQ,EAAE,QAAQ;oBAClB,MAAM,EAAE,4BAAY,CAAC,UAAU,EAAE;iBAClC;gBACD;oBACE,EAAE,EAAE,WAAW;oBACf,MAAM,EAAE,GAAG,cAAc,CAAC,SAAS,EAAE;oBACrC,QAAQ,EAAE,aAAa;oBACvB,MAAM,EAAE,4BAAY,CAAC,UAAU,EAAE;iBAClC;gBACD;oBACE,EAAE,EAAE,aAAa;oBACjB,MAAM,EAAE,GAAG,cAAc,CAAC,WAAW,EAAE;oBACvC,QAAQ,EAAE,QAAQ;oBAClB,MAAM,EAAE,4BAAY,CAAC,UAAU,EAAE;iBAClC;aACF;SACF;KACF,EACD,CAAC,cAAc,CAAC,WAAW,EAAE,cAAc,CAAC,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,CACnF,CAAC;IAEF,MAAM,YAAY,GAAG,eAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,mBAAW,CAC3B,CAAC,KAAkC,EAAE,EAAE,CAAC,CACtC,8BAAC,8BAAc,OAAK,KAAK,EAAE,YAAY,EAAE,YAAY,GAAI,CAC1D,EACD,CAAC,YAAY,CAAC,CACf,CAAC;IAEF,OAAO,CACL,uCAAK,SAAS,EAAC,kCAAkC;QAC/C,8BAAC,8BAAc,IACb,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;gBACtB,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACxB,YAAY,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC,EACD,WAAW,EAAE,SAAS,EACtB,IAAI,EAAE,YAAY,EAClB,gBAAgB,EAAC,uBAAuB,GACzB;QACjB,8BAAC,qBAAK,IACJ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,EACtB,SAAS,EAAC,wBAAwB,EAClC,iBAAiB,EAAE,MAAM,cAAc,CAAC,MAAM,aAAa,EAC3D,UAAU,QACV,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;gBACrB,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAG,CAAC,CAAC;YAC7B,CAAC,EACD,iBAAiB,EAAE,SAAS,GAC5B;QACF,uCAAK,SAAS,EAAC,yBAAyB;YACtC,8BAAC,sBAAM,IAAC,OAAO,EAAE,QAAQ,aAAiB,CACtC,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 type { ITwin, ITwinsAccessClient, ITwinsAPIResponse } from \"@itwin/itwins-client\";\nimport { ITwinSubClass } from \"@itwin/itwins-client\";\nimport { SvgCalendar, SvgList, SvgStarHollow } from \"@itwin/itwinui-icons-react\";\nimport type { TablePaginatorRendererProps } from \"@itwin/itwinui-react\";\nimport { Button, HorizontalTabs, Tab, Table, tableFilters, TablePaginator } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport \"./SelectITwin.scss\";\nimport type { GetAccessTokenFn } from \"./context/GroupingApiConfigContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useITwinsClient } from \"./context/ITwinsClientContext\";\nimport { handleError } from \"./utils\";\n\ntype IITwinTyped = CreateTypeFromInterface<ITwin>;\n\nconst defaultDisplayStrings = {\n iTwins: \"iTwins\",\n iTwinNumber: \"Number\",\n iTwinName: \"Name\",\n iTwinStatus: \"Status\",\n};\n\nconst tabsWithIcons = [\n <Tab key=\"favorite\" label=\"Favorite iTwins\" startIcon={<SvgStarHollow />} />,\n <Tab key=\"recents\" label=\"Recent iTwins\" startIcon={<SvgCalendar />} />,\n <Tab key=\"all\" label=\"My iTwins\" startIcon={<SvgList />} />,\n];\n\nconst fetchITwins = async (\n setITwins: (iTwins: ITwin[]) => void,\n setIsLoading: (isLoading: boolean) => void,\n getAccessToken: GetAccessTokenFn,\n iTwinsClient: ITwinsAccessClient,\n iTwinType: number,\n) => {\n try {\n setITwins([]);\n setIsLoading(true);\n const accessToken = await getAccessToken();\n let iTwinsResponse: ITwinsAPIResponse<ITwin[]>;\n switch (iTwinType) {\n case 0:\n iTwinsResponse = await iTwinsClient.queryFavoritesAsync(accessToken, ITwinSubClass.Project);\n break;\n case 1:\n iTwinsResponse = await iTwinsClient.queryRecentsAsync(accessToken, ITwinSubClass.Project);\n break;\n default:\n iTwinsResponse = await iTwinsClient.queryAsync(accessToken, ITwinSubClass.Project);\n }\n setITwins(iTwinsResponse.data!);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\ninterface SelectITwinProps {\n onSelect: (iTwinId: string) => void;\n onCancel: () => void;\n onChangeITwinType: (iTwinType: number) => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n defaultITwinType?: number;\n}\nconst SelectITwin = ({\n onSelect,\n onCancel,\n onChangeITwinType,\n displayStrings: userDisplayStrings,\n defaultITwinType = 0,\n}: SelectITwinProps) => {\n const { getAccessToken } = useGroupingMappingApiConfig();\n const iTwinsClient = useITwinsClient();\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [iTwins, setITwins] = useState<ITwin[]>([]);\n const [iTwinType, setITwinType] = useState<number>(defaultITwinType);\n\n useEffect(() => {\n void fetchITwins(setITwins, setIsLoading, getAccessToken, iTwinsClient, iTwinType);\n }, [getAccessToken, iTwinsClient, setIsLoading, iTwinType]);\n\n const displayStrings = React.useMemo(\n () => ({ ...defaultDisplayStrings, ...userDisplayStrings }),\n [userDisplayStrings]\n );\n\n const iTwinsColumns = useMemo(\n () => [\n {\n Header: \"Table\",\n columns: [\n {\n id: \"iTwinNumber\",\n Header: `${displayStrings.iTwinNumber}`,\n accessor: \"number\",\n Filter: tableFilters.TextFilter(),\n },\n {\n id: \"iTwinName\",\n Header: `${displayStrings.iTwinName}`,\n accessor: \"displayName\",\n Filter: tableFilters.TextFilter(),\n },\n {\n id: \"iTwinStatus\",\n Header: `${displayStrings.iTwinStatus}`,\n accessor: \"status\",\n Filter: tableFilters.TextFilter(),\n },\n ],\n },\n ],\n [displayStrings.iTwinNumber, displayStrings.iTwinName, displayStrings.iTwinStatus]\n );\n\n const pageSizeList = useMemo(() => [10, 25, 50], []);\n const paginator = useCallback(\n (props: TablePaginatorRendererProps) => (\n <TablePaginator {...props} pageSizeList={pageSizeList} />\n ),\n [pageSizeList]\n );\n\n return (\n <div className=\"gmw-select-itwin-table-container\">\n <HorizontalTabs\n labels={tabsWithIcons}\n onTabSelected={(type) => {\n onChangeITwinType(type);\n setITwinType(type);\n }}\n activeIndex={iTwinType}\n type={\"borderless\"}\n contentClassName=\"gmw-table-holding-tab\">\n </HorizontalTabs>\n <Table<IITwinTyped>\n data={iTwins}\n columns={iTwinsColumns}\n className='gmw-select-itwin-table'\n emptyTableContent={`No ${displayStrings.iTwins} available.`}\n isSortable\n isLoading={isLoading}\n onRowClick={(_, row) => {\n onSelect(row.original.id!);\n }}\n paginatorRenderer={paginator}\n />\n <div className=\"gmw-import-action-panel\">\n <Button onClick={onCancel}>Cancel</Button>\n </div>\n </div>\n );\n};\n\nexport default SelectITwin;\n"]}
@@ -4,30 +4,20 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  @import '~@itwin/itwinui-css/scss/variables';
6
6
 
7
- .gmw-select-project-grid-container {
7
+ .gmw-select-itwin-table-container {
8
8
  display: flex;
9
9
  flex-direction: column;
10
10
  flex-grow: 1;
11
11
  min-height: 0;
12
12
 
13
- .gmw-search-input {
14
- margin-left: auto;
15
- }
16
-
17
- .gmw-project-grid {
18
- overflow: auto;
19
- flex-grow: 1;
20
- }
21
-
22
- .gmw-grid-holding-tab {
13
+ .gmw-table-holding-tab {
23
14
  display: flex;
24
15
  flex-direction: column;
25
16
  gap: $iui-baseline;
26
17
  }
27
18
 
28
- .gmw-select-project-action-panel {
29
- display: flex;
30
- justify-content: center;
31
- padding: $iui-baseline * 2 $iui-m $iui-baseline;
19
+ .gmw-select-itwin-table {
20
+ overflow: auto;
21
+ flex-grow: 1;
32
22
  }
33
- }
23
+ }
@@ -7,12 +7,11 @@
7
7
  .gmw-select-mapping-container {
8
8
  display: flex;
9
9
  flex-direction: column;
10
- gap: $iui-baseline * 2;
11
10
  flex-grow: 1;
12
11
  min-height: 0;
13
12
 
14
13
  .gmw-select-mapping-table {
15
- flex-grow: 1;
16
14
  overflow: auto;
15
+ flex-grow: 1;
17
16
  }
18
17
  }
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import { IModelsClient } from "@itwin/imodels-client-management";
3
+ import type { ClientPrefix } from "./GroupingApiConfigContext";
4
+ export declare const createIModelsClient: (prefix?: ClientPrefix) => IModelsClient;
5
+ export declare const IModelsClientContext: import("react").Context<IModelsClient>;
6
+ export declare const useIModelsClient: () => IModelsClient;
7
+ //# sourceMappingURL=IModelsClientContext.d.ts.map
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useIModelsClient = exports.IModelsClientContext = exports.createIModelsClient = void 0;
4
+ const imodels_client_management_1 = require("@itwin/imodels-client-management");
5
+ const react_1 = require("react");
6
+ const baseUrl = "https://api.bentley.com/imodels";
7
+ const prefixUrl = (baseUrl, prefix) => {
8
+ if (prefix && baseUrl) {
9
+ return baseUrl.replace("api.bentley.com", `${prefix}-api.bentley.com`);
10
+ }
11
+ return baseUrl;
12
+ };
13
+ const createIModelsClient = (prefix) => {
14
+ const url = prefixUrl(baseUrl, prefix);
15
+ const options = {
16
+ api: {
17
+ baseUrl: url,
18
+ },
19
+ };
20
+ return new imodels_client_management_1.IModelsClient(options);
21
+ };
22
+ exports.createIModelsClient = createIModelsClient;
23
+ exports.IModelsClientContext = react_1.createContext(exports.createIModelsClient());
24
+ const useIModelsClient = () => {
25
+ const context = react_1.useContext(exports.IModelsClientContext);
26
+ if (!context) {
27
+ throw new Error("useIModelsClient should be used within an IModelsClientContext provider");
28
+ }
29
+ return context;
30
+ };
31
+ exports.useIModelsClient = useIModelsClient;
32
+ //# sourceMappingURL=IModelsClientContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IModelsClientContext.js","sourceRoot":"","sources":["../../../../../src/widget/components/context/IModelsClientContext.ts"],"names":[],"mappings":";;;AAKA,gFAAiE;AACjE,iCAAkD;AAGlD,MAAM,OAAO,GAAW,iCAAiC,CAAC;AAE1D,MAAM,SAAS,GAAG,CAAC,OAAgB,EAAE,MAAe,EAAE,EAAE;IACtD,IAAI,MAAM,IAAI,OAAO,EAAE;QACrB,OAAO,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,MAAM,kBAAkB,CAAC,CAAC;KACxE;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEK,MAAM,mBAAmB,GAAG,CAAC,MAAqB,EAAiB,EAAE;IAC1E,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,OAAO,GAAyB;QACpC,GAAG,EAAE;YACH,OAAO,EAAE,GAAG;SACb;KACF,CAAC;IACF,OAAO,IAAI,yCAAa,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC,CAAC;AARW,QAAA,mBAAmB,uBAQ9B;AAEW,QAAA,oBAAoB,GAAG,qBAAa,CAAgB,2BAAmB,EAAE,CAAC,CAAC;AAEjF,MAAM,gBAAgB,GAAG,GAAG,EAAE;IACnC,MAAM,OAAO,GAAG,kBAAU,CAAC,4BAAoB,CAAC,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;KACH;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AARW,QAAA,gBAAgB,oBAQ3B","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 type { IModelsClientOptions } from \"@itwin/imodels-client-management\";\nimport { IModelsClient } from \"@itwin/imodels-client-management\";\nimport { createContext, useContext } from \"react\";\nimport type { ClientPrefix } from \"./GroupingApiConfigContext\";\n\nconst baseUrl: string = \"https://api.bentley.com/imodels\";\n\nconst prefixUrl = (baseUrl?: string, prefix?: string) => {\n if (prefix && baseUrl) {\n return baseUrl.replace(\"api.bentley.com\", `${prefix}-api.bentley.com`);\n }\n return baseUrl;\n};\n\nexport const createIModelsClient = (prefix?: ClientPrefix): IModelsClient => {\n const url = prefixUrl(baseUrl, prefix);\n const options: IModelsClientOptions = {\n api: {\n baseUrl: url,\n },\n };\n return new IModelsClient(options);\n};\n\nexport const IModelsClientContext = createContext<IModelsClient>(createIModelsClient());\n\nexport const useIModelsClient = () => {\n const context = useContext(IModelsClientContext);\n if (!context) {\n throw new Error(\n \"useIModelsClient should be used within an IModelsClientContext provider\"\n );\n }\n return context;\n};\n"]}
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import { ITwinsAccessClient } from "@itwin/itwins-client";
3
+ import type { ClientPrefix } from "./GroupingApiConfigContext";
4
+ export declare const createITwinsClient: (prefix?: ClientPrefix) => ITwinsAccessClient;
5
+ export declare const ITwinsClientContext: import("react").Context<ITwinsAccessClient>;
6
+ export declare const useITwinsClient: () => ITwinsAccessClient;
7
+ //# sourceMappingURL=ITwinsClientContext.d.ts.map
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useITwinsClient = exports.ITwinsClientContext = exports.createITwinsClient = void 0;
4
+ /*---------------------------------------------------------------------------------------------
5
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
+ * See LICENSE.md in the project root for license terms and full copyright notice.
7
+ *--------------------------------------------------------------------------------------------*/
8
+ const itwins_client_1 = require("@itwin/itwins-client");
9
+ const react_1 = require("react");
10
+ const baseUrl = "https://api.bentley.com/itwins";
11
+ const prefixUrl = (baseUrl, prefix) => {
12
+ if (prefix && baseUrl) {
13
+ return baseUrl.replace("api.bentley.com", `${prefix}-api.bentley.com`);
14
+ }
15
+ return baseUrl;
16
+ };
17
+ const createITwinsClient = (prefix) => {
18
+ const url = prefixUrl(baseUrl, prefix);
19
+ return new itwins_client_1.ITwinsAccessClient(url);
20
+ };
21
+ exports.createITwinsClient = createITwinsClient;
22
+ exports.ITwinsClientContext = react_1.createContext(exports.createITwinsClient());
23
+ const useITwinsClient = () => {
24
+ const context = react_1.useContext(exports.ITwinsClientContext);
25
+ if (!context) {
26
+ throw new Error("useITwinsClient should be used within an ITwinsClientContext provider");
27
+ }
28
+ return context;
29
+ };
30
+ exports.useITwinsClient = useITwinsClient;
31
+ //# sourceMappingURL=ITwinsClientContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITwinsClientContext.js","sourceRoot":"","sources":["../../../../../src/widget/components/context/ITwinsClientContext.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,wDAA0D;AAC1D,iCAAkD;AAGlD,MAAM,OAAO,GAAW,gCAAgC,CAAC;AAEzD,MAAM,SAAS,GAAG,CAAC,OAAgB,EAAE,MAAe,EAAE,EAAE;IACtD,IAAI,MAAM,IAAI,OAAO,EAAE;QACrB,OAAO,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,MAAM,kBAAkB,CAAC,CAAC;KACxE;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEK,MAAM,kBAAkB,GAAG,CAAC,MAAqB,EAAsB,EAAE;IAC9E,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvC,OAAO,IAAI,kCAAkB,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC,CAAC;AAHW,QAAA,kBAAkB,sBAG7B;AAEW,QAAA,mBAAmB,GAAG,qBAAa,CAAqB,0BAAkB,EAAE,CAAC,CAAC;AAEpF,MAAM,eAAe,GAAG,GAAG,EAAE;IAClC,MAAM,OAAO,GAAG,kBAAU,CAAC,2BAAmB,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;KACH;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AARW,QAAA,eAAe,mBAQ1B","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 { ITwinsAccessClient } from \"@itwin/itwins-client\";\nimport { createContext, useContext } from \"react\";\nimport type { ClientPrefix } from \"./GroupingApiConfigContext\";\n\nconst baseUrl: string = \"https://api.bentley.com/itwins\";\n\nconst prefixUrl = (baseUrl?: string, prefix?: string) => {\n if (prefix && baseUrl) {\n return baseUrl.replace(\"api.bentley.com\", `${prefix}-api.bentley.com`);\n }\n return baseUrl;\n};\n\nexport const createITwinsClient = (prefix?: ClientPrefix): ITwinsAccessClient => {\n const url = prefixUrl(baseUrl, prefix);\n return new ITwinsAccessClient(url);\n};\n\nexport const ITwinsClientContext = createContext<ITwinsAccessClient>(createITwinsClient());\n\nexport const useITwinsClient = () => {\n const context = useContext(ITwinsClientContext);\n if (!context) {\n throw new Error(\n \"useITwinsClient should be used within an ITwinsClientContext provider\"\n );\n }\n return context;\n};\n"]}
@@ -1,10 +1,10 @@
1
- import type { AbstractWidgetProps, UiItemsProvider } from "@itwin/appui-abstract";
2
- import { AbstractZoneLocation, StagePanelLocation, StagePanelSection } from "@itwin/appui-abstract";
1
+ import type { CommonWidgetProps, UiItemsProvider } from "@itwin/appui-react";
2
+ import { StagePanelLocation, StagePanelSection } from "@itwin/appui-react";
3
3
  import type { GroupingMappingProps } from "./components/GroupingMapping";
4
4
  export declare class GroupingMappingProvider implements UiItemsProvider {
5
5
  private readonly _props;
6
6
  readonly id = "GroupingMappingProvider";
7
7
  constructor(_props?: GroupingMappingProps);
8
- provideWidgets(_stageId: string, stageUsage: string, location: StagePanelLocation, section?: StagePanelSection, zonelocation?: AbstractZoneLocation): ReadonlyArray<AbstractWidgetProps>;
8
+ provideWidgets(_stageId: string, stageUsage: string, location: StagePanelLocation, section?: StagePanelSection): ReadonlyArray<CommonWidgetProps>;
9
9
  }
10
10
  //# sourceMappingURL=GroupingMappingWidget.d.ts.map
@@ -1,4 +1,4 @@
1
- import { AbstractZoneLocation, StagePanelLocation, StagePanelSection, StageUsage, } from "@itwin/appui-abstract";
1
+ import { StagePanelLocation, StagePanelSection, StageUsage, } from "@itwin/appui-react";
2
2
  import React from "react";
3
3
  import GroupingMapping from "./components/GroupingMapping";
4
4
  export class GroupingMappingProvider {
@@ -6,12 +6,11 @@ export class GroupingMappingProvider {
6
6
  this._props = _props;
7
7
  this.id = "GroupingMappingProvider";
8
8
  }
9
- provideWidgets(_stageId, stageUsage, location, section, zonelocation) {
9
+ provideWidgets(_stageId, stageUsage, location, section) {
10
10
  const widgets = [];
11
- if ((location === StagePanelLocation.Left &&
11
+ if (location === StagePanelLocation.Left &&
12
12
  section === StagePanelSection.Start &&
13
- stageUsage === StageUsage.General) ||
14
- zonelocation === AbstractZoneLocation.CenterLeft) {
13
+ stageUsage === StageUsage.General) {
15
14
  const GroupingMappingWidget = {
16
15
  id: "GroupingMappingWidget",
17
16
  label: "Grouping & Mapping",
@@ -1 +1 @@
1
- {"version":3,"file":"GroupingMappingWidget.js","sourceRoot":"","sources":["../../../src/widget/GroupingMappingWidget.tsx"],"names":[],"mappings":"AAQA,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,eAAe,MAAM,8BAA8B,CAAC;AAE3D,MAAM,OAAO,uBAAuB;IAGlC,YAA6B,SAA+B,EAAE;QAAjC,WAAM,GAAN,MAAM,CAA2B;QAF9C,OAAE,GAAG,yBAAyB,CAAC;IAEmB,CAAC;IAE5D,cAAc,CACnB,QAAgB,EAChB,UAAkB,EAClB,QAA4B,EAC5B,OAA2B,EAC3B,YAAmC;QAEnC,MAAM,OAAO,GAA0B,EAAE,CAAC;QAC1C,IACE,CAAC,QAAQ,KAAK,kBAAkB,CAAC,IAAI;YACnC,OAAO,KAAK,iBAAiB,CAAC,KAAK;YACnC,UAAU,KAAK,UAAU,CAAC,OAAO,CAAC;YACpC,YAAY,KAAK,oBAAoB,CAAC,UAAU,EAChD;YACA,MAAM,qBAAqB,GAAwB;gBACjD,EAAE,EAAE,uBAAuB;gBAC3B,KAAK,EAAE,oBAAoB;gBAC3B,gBAAgB,EAAE,GAAG,EAAE;oBACrB,OAAO,oBAAC,eAAe,OAAK,IAAI,CAAC,MAAM,GAAI,CAAC;gBAC9C,CAAC;aACF,CAAC;YAEF,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;SACrC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF","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 type {\n AbstractWidgetProps,\n UiItemsProvider,\n} from \"@itwin/appui-abstract\";\nimport {\n AbstractZoneLocation,\n StagePanelLocation,\n StagePanelSection,\n StageUsage,\n} from \"@itwin/appui-abstract\";\nimport React from \"react\";\nimport type { GroupingMappingProps } from \"./components/GroupingMapping\";\nimport GroupingMapping from \"./components/GroupingMapping\";\n\nexport class GroupingMappingProvider implements UiItemsProvider {\n public readonly id = \"GroupingMappingProvider\";\n\n constructor(private readonly _props: GroupingMappingProps = {}) { }\n\n public provideWidgets(\n _stageId: string,\n stageUsage: string,\n location: StagePanelLocation,\n section?: StagePanelSection,\n zonelocation?: AbstractZoneLocation\n ): ReadonlyArray<AbstractWidgetProps> {\n const widgets: AbstractWidgetProps[] = [];\n if (\n (location === StagePanelLocation.Left &&\n section === StagePanelSection.Start &&\n stageUsage === StageUsage.General) ||\n zonelocation === AbstractZoneLocation.CenterLeft\n ) {\n const GroupingMappingWidget: AbstractWidgetProps = {\n id: \"GroupingMappingWidget\",\n label: \"Grouping & Mapping\",\n getWidgetContent: () => {\n return <GroupingMapping {...this._props} />;\n },\n };\n\n widgets.push(GroupingMappingWidget);\n }\n\n return widgets;\n }\n}\n"]}
1
+ {"version":3,"file":"GroupingMappingWidget.js","sourceRoot":"","sources":["../../../src/widget/GroupingMappingWidget.tsx"],"names":[],"mappings":"AAQA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,eAAe,MAAM,8BAA8B,CAAC;AAE3D,MAAM,OAAO,uBAAuB;IAGlC,YAA6B,SAA+B,EAAE;QAAjC,WAAM,GAAN,MAAM,CAA2B;QAF9C,OAAE,GAAG,yBAAyB,CAAC;IAEmB,CAAC;IAE5D,cAAc,CACnB,QAAgB,EAChB,UAAkB,EAClB,QAA4B,EAC5B,OAA2B;QAE3B,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,IAAI,QAAQ,KAAK,kBAAkB,CAAC,IAAI;YACpC,OAAO,KAAK,iBAAiB,CAAC,KAAK;YACnC,UAAU,KAAK,UAAU,CAAC,OAAO,EACnC;YACA,MAAM,qBAAqB,GAAsB;gBAC/C,EAAE,EAAE,uBAAuB;gBAC3B,KAAK,EAAE,oBAAoB;gBAC3B,gBAAgB,EAAE,GAAG,EAAE;oBACrB,OAAO,oBAAC,eAAe,OAAK,IAAI,CAAC,MAAM,GAAI,CAAC;gBAC9C,CAAC;aACF,CAAC;YAEF,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;SACrC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF","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 type {\n CommonWidgetProps,\n UiItemsProvider,\n} from \"@itwin/appui-react\";\nimport {\n StagePanelLocation,\n StagePanelSection,\n StageUsage,\n} from \"@itwin/appui-react\";\nimport React from \"react\";\nimport type { GroupingMappingProps } from \"./components/GroupingMapping\";\nimport GroupingMapping from \"./components/GroupingMapping\";\n\nexport class GroupingMappingProvider implements UiItemsProvider {\n public readonly id = \"GroupingMappingProvider\";\n\n constructor(private readonly _props: GroupingMappingProps = {}) { }\n\n public provideWidgets(\n _stageId: string,\n stageUsage: string,\n location: StagePanelLocation,\n section?: StagePanelSection,\n ): ReadonlyArray<CommonWidgetProps> {\n const widgets: CommonWidgetProps[] = [];\n if (location === StagePanelLocation.Left &&\n section === StagePanelSection.Start &&\n stageUsage === StageUsage.General\n ) {\n const GroupingMappingWidget: CommonWidgetProps = {\n id: \"GroupingMappingWidget\",\n label: \"Grouping & Mapping\",\n getWidgetContent: () => {\n return <GroupingMapping {...this._props} />;\n },\n };\n\n widgets.push(GroupingMappingWidget);\n }\n\n return widgets;\n }\n}\n"]}
@@ -20,8 +20,7 @@ import SortableHorizontalTile from "./SortableHorizontalTile";
20
20
  import Split from "react-split";
21
21
  import "./GroupPropertyAction.scss";
22
22
  import { convertPresentationFields, convertToECProperties, fetchPresentationDescriptor, findProperties, } from "./GroupPropertyUtils";
23
- import { useGroupHilitedElementsContext } from "./context/GroupHilitedElementsContext";
24
- import { getHiliteIdsAndKeysetFromGroup } from "./groupsHelpers";
23
+ import { manufactureKeys } from "./viewerUtils";
25
24
  export const quantityTypesSelectionOptions = [
26
25
  { value: QuantityType.Area, label: "Area" },
27
26
  { value: QuantityType.Distance, label: "Distance" },
@@ -35,7 +34,6 @@ export const quantityTypesSelectionOptions = [
35
34
  export const GroupPropertyAction = ({ mappingId, group, groupProperty, onSaveSuccess, onClickCancel, }) => {
36
35
  const { getAccessToken, iModelId, iModelConnection } = useGroupingMappingApiConfig();
37
36
  const mappingClient = useMappingClient();
38
- const { hilitedElementsQueryCache } = useGroupHilitedElementsContext();
39
37
  const [propertyName, setPropertyName] = useState("");
40
38
  const [dataType, setDataType] = useState(DataType.Undefined);
41
39
  const [quantityType, setQuantityType] = useState(QuantityType.Undefined);
@@ -82,8 +80,8 @@ export const GroupPropertyAction = ({ mappingId, group, groupProperty, onSaveSuc
82
80
  setIsLoading(true);
83
81
  if (!iModelConnection)
84
82
  return;
85
- const result = await getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache);
86
- const descriptor = await fetchPresentationDescriptor(iModelConnection, result.keySet);
83
+ const result = await manufactureKeys(group.query, iModelConnection);
84
+ const descriptor = await fetchPresentationDescriptor(iModelConnection, result);
87
85
  // Only allow primitives and structs
88
86
  const propertyFields = (_a = descriptor === null || descriptor === void 0 ? void 0 : descriptor.fields.filter((field) => field.type.valueFormat === PropertyValueFormat.Primitive ||
89
87
  field.type.valueFormat === PropertyValueFormat.Struct)) !== null && _a !== void 0 ? _a : [];
@@ -110,7 +108,7 @@ export const GroupPropertyAction = ({ mappingId, group, groupProperty, onSaveSuc
110
108
  setIsLoading(false);
111
109
  };
112
110
  void generateProperties();
113
- }, [getAccessToken, mappingClient, iModelConnection, iModelId, groupProperty, hilitedElementsQueryCache, mappingId, group]);
111
+ }, [getAccessToken, mappingClient, iModelConnection, iModelId, groupProperty, mappingId, group]);
114
112
  const onSave = async () => {
115
113
  if (!validator.allValid()) {
116
114
  showValidationMessage(true);