@itwin/saved-views-react 1.2.0 → 1.2.2
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/SavedViewsClient/ITwinSavedViewsClient.js +5 -7
- package/lib/captureSavedViewData.js +4 -0
- package/lib/createViewState.js +26 -1
- package/lib/translation/SavedViewTypes.d.ts +3 -1
- package/lib/translation/clipVectorsExtractor.d.ts +2 -0
- package/lib/translation/clipVectorsExtractor.js +1 -1
- package/lib/translation/clipVectorsLegacyExtractor.d.ts +2 -0
- package/lib/translation/clipVectorsLegacyExtractor.js +6 -5
- package/lib/translation/viewDetailsExtractor.d.ts +4 -0
- package/lib/translation/viewDetailsExtractor.js +40 -0
- package/lib/translation/viewDetailsLegacyExtractor.d.ts +4 -0
- package/lib/translation/viewDetailsLegacyExtractor.js +34 -0
- package/package.json +5 -5
|
@@ -92,13 +92,11 @@ export class ITwinSavedViewsClient {
|
|
|
92
92
|
savedViewData,
|
|
93
93
|
signal: args.signal,
|
|
94
94
|
});
|
|
95
|
-
await Promise.all((args.savedViewData?.extensions ?? []).map(({ extensionName, data }) => {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
});
|
|
101
|
-
}));
|
|
95
|
+
await Promise.all((args.savedViewData?.extensions ?? []).map(({ extensionName, data }) => this.#client.createExtension({
|
|
96
|
+
savedViewId: args.savedViewId,
|
|
97
|
+
extensionName,
|
|
98
|
+
data,
|
|
99
|
+
})));
|
|
102
100
|
return savedViewResponseToSavedView(savedView);
|
|
103
101
|
}
|
|
104
102
|
async deleteSavedView(args) {
|
|
@@ -2,6 +2,7 @@ import { QueryRowFormat } from "@itwin/core-common";
|
|
|
2
2
|
import { extensionHandlers } from "./translation/SavedViewsExtensionHandlers.js";
|
|
3
3
|
import { extractClipVectorsFromLegacy } from "./translation/clipVectorsLegacyExtractor.js";
|
|
4
4
|
import { extractDisplayStyle2dFromLegacy, extractDisplayStyle3dFromLegacy, } from "./translation/displayStyleExtractor.js";
|
|
5
|
+
import { extractViewDetails2dFromLegacy, extractViewDetails3dFromLegacy, } from "./translation/viewDetailsLegacyExtractor.js";
|
|
5
6
|
/**
|
|
6
7
|
* Captures current {@link Viewport} state into serializable format. The returned
|
|
7
8
|
* data can later be used to restore viewport's view.
|
|
@@ -87,6 +88,7 @@ function createSpatialSavedViewObject(vp, hiddenCategories, hiddenModels) {
|
|
|
87
88
|
},
|
|
88
89
|
displayStyle: extractDisplayStyle3dFromLegacy(displayStyleProps),
|
|
89
90
|
clipVectors: extractClipVectorsFromLegacy(viewDefinitionProps),
|
|
91
|
+
viewDetails: extractViewDetails3dFromLegacy(viewDefinitionProps),
|
|
90
92
|
};
|
|
91
93
|
}
|
|
92
94
|
function toArrayVector3d(xyzProps) {
|
|
@@ -117,6 +119,7 @@ function createDrawingSavedViewObject(vp, hiddenCategories) {
|
|
|
117
119
|
enabled: viewState.categorySelector.toJSON().categories,
|
|
118
120
|
disabled: hiddenCategories,
|
|
119
121
|
},
|
|
122
|
+
viewDetails: extractViewDetails2dFromLegacy(viewDefinitionProps),
|
|
120
123
|
};
|
|
121
124
|
}
|
|
122
125
|
function createSheetSavedViewObject(vp, hiddenCategories) {
|
|
@@ -136,6 +139,7 @@ function createSheetSavedViewObject(vp, hiddenCategories) {
|
|
|
136
139
|
width: viewState.sheetSize.x,
|
|
137
140
|
height: viewState.sheetSize.y,
|
|
138
141
|
sheetAttachments: viewState.attachmentIds,
|
|
142
|
+
viewDetails: extractViewDetails2dFromLegacy(viewDefinitionProps),
|
|
139
143
|
};
|
|
140
144
|
}
|
|
141
145
|
function toArrayVector2d(xyzProps) {
|
package/lib/createViewState.js
CHANGED
|
@@ -7,6 +7,7 @@ import { DrawingViewState, SheetViewState, SpatialViewState, } from "@itwin/core
|
|
|
7
7
|
import { queryMissingCategories, queryMissingModels, } from "./captureSavedViewData.js";
|
|
8
8
|
import { extractClipVectors } from "./translation/clipVectorsExtractor.js";
|
|
9
9
|
import { extractDisplayStyle, extractDisplayStyle3d, } from "./translation/displayStyleExtractor.js";
|
|
10
|
+
import { extractViewDetails2d, extractViewDetails3d } from "./translation/viewDetailsExtractor.js";
|
|
10
11
|
/**
|
|
11
12
|
* Creates {@link ViewStateProps} object out of Saved View data. It provides a lower-level
|
|
12
13
|
* access to view data for advanced use.
|
|
@@ -104,7 +105,17 @@ async function createSpatialViewStateProps(iModel, viewData) {
|
|
|
104
105
|
angles: viewData.angles,
|
|
105
106
|
camera: viewData.camera ?? new Camera(),
|
|
106
107
|
jsonProperties: {
|
|
107
|
-
viewDetails:
|
|
108
|
+
viewDetails: {
|
|
109
|
+
acs: seedViewState.getAuxiliaryCoordinateSystemId(),
|
|
110
|
+
aspectSkew: seedViewState.getAspectRatioSkew(),
|
|
111
|
+
gridOrient: seedViewState.getGridOrientation(),
|
|
112
|
+
gridPerRef: seedViewState.getGridsPerRef(),
|
|
113
|
+
gridSpaceX: seedViewState.getGridSpacing().x,
|
|
114
|
+
gridSpaceY: seedViewState.getGridSpacing().y,
|
|
115
|
+
disable3dManipulations: !seedViewState.allow3dManipulations,
|
|
116
|
+
...extractClipVectors(viewData),
|
|
117
|
+
...extractViewDetails3d(viewData),
|
|
118
|
+
},
|
|
108
119
|
},
|
|
109
120
|
classFullName: seedViewState.classFullName,
|
|
110
121
|
code: seedViewState.code,
|
|
@@ -150,7 +161,14 @@ async function createDrawingViewStateProps(iModel, viewData) {
|
|
|
150
161
|
id: seedViewState.id,
|
|
151
162
|
jsonProperties: {
|
|
152
163
|
viewDetails: {
|
|
164
|
+
acs: seedViewState.getAuxiliaryCoordinateSystemId(),
|
|
165
|
+
aspectSkew: seedViewState.getAspectRatioSkew(),
|
|
153
166
|
gridOrient: seedViewState.getGridOrientation(),
|
|
167
|
+
gridPerRef: seedViewState.getGridsPerRef(),
|
|
168
|
+
gridSpaceX: seedViewState.getGridSpacing().x,
|
|
169
|
+
gridSpaceY: seedViewState.getGridSpacing().y,
|
|
170
|
+
...extractClipVectors(viewData),
|
|
171
|
+
...extractViewDetails2d(viewData),
|
|
154
172
|
},
|
|
155
173
|
},
|
|
156
174
|
code: cloneCode(seedViewState.code),
|
|
@@ -198,7 +216,14 @@ async function createSheetViewStateProps(iModel, viewData) {
|
|
|
198
216
|
id: seedViewState.id,
|
|
199
217
|
jsonProperties: {
|
|
200
218
|
viewDetails: {
|
|
219
|
+
acs: seedViewState.getAuxiliaryCoordinateSystemId(),
|
|
220
|
+
aspectSkew: seedViewState.getAspectRatioSkew(),
|
|
201
221
|
gridOrient: seedViewState.getGridOrientation(),
|
|
222
|
+
gridPerRef: seedViewState.getGridsPerRef(),
|
|
223
|
+
gridSpaceX: seedViewState.getGridSpacing().x,
|
|
224
|
+
gridSpaceY: seedViewState.getGridSpacing().y,
|
|
225
|
+
...extractClipVectors(viewData),
|
|
226
|
+
...extractViewDetails2d(viewData),
|
|
202
227
|
},
|
|
203
228
|
},
|
|
204
229
|
code: cloneCode(seedViewState.code),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Id64Array } from "@itwin/core-bentley";
|
|
2
|
-
import type { CategorySelectorProps, DisplayStyle3dProps, DisplayStyleProps, EmphasizeElementsProps, ModelSelectorProps, SectionDrawingViewProps, SheetProps, SpatialViewDefinitionProps, ViewDefinition2dProps } from "@itwin/core-common";
|
|
2
|
+
import type { CategorySelectorProps, DisplayStyle3dProps, DisplayStyleProps, EmphasizeElementsProps, ModelSelectorProps, SectionDrawingViewProps, SheetProps, SpatialViewDefinitionProps, ViewDefinition2dProps, ViewDetails3dProps, ViewDetailsProps } from "@itwin/core-common";
|
|
3
3
|
import type { Range3dProps } from "@itwin/core-geometry";
|
|
4
4
|
export interface LegacySavedView3d extends LegacySavedViewBase {
|
|
5
5
|
displayStyleProps: DisplayStyle3dProps;
|
|
@@ -7,6 +7,7 @@ export interface LegacySavedView3d extends LegacySavedViewBase {
|
|
|
7
7
|
viewDefinitionProps: SpatialViewDefinitionProps;
|
|
8
8
|
perModelCategoryVisibility?: PerModelCategoryVisibilityProps[];
|
|
9
9
|
hiddenModels?: Id64Array;
|
|
10
|
+
viewDetails?: ViewDetails3dProps;
|
|
10
11
|
}
|
|
11
12
|
export interface PerModelCategoryVisibilityProps {
|
|
12
13
|
modelId: string;
|
|
@@ -20,6 +21,7 @@ export interface LegacySavedView2d extends LegacySavedViewBase {
|
|
|
20
21
|
sheetProps?: SheetProps;
|
|
21
22
|
sheetAttachments?: Id64Array;
|
|
22
23
|
modelExtents?: Range3dProps;
|
|
24
|
+
viewDetails?: ViewDetailsProps;
|
|
23
25
|
}
|
|
24
26
|
export interface LegacySavedViewBase {
|
|
25
27
|
id: string;
|
|
@@ -28,7 +28,7 @@ const clipPlaneMappings = [
|
|
|
28
28
|
const clipPrimitivePlaneMappings = [
|
|
29
29
|
extractObject([extractArray2d(clipPlaneMappings, "clips"), extractBoolean("invisible")], "planes"),
|
|
30
30
|
];
|
|
31
|
-
const clipVectorMappings = [
|
|
31
|
+
export const clipVectorMappings = [
|
|
32
32
|
extractArrayConditionally([
|
|
33
33
|
{
|
|
34
34
|
discriminator: "planes",
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import type { SpatialViewDefinitionProps } from "@itwin/core-common";
|
|
2
2
|
import type { ClipPrimitivePlaneProps, ClipPrimitiveShapeProps } from "@itwin/saved-views-client";
|
|
3
|
+
export declare function isValidClipPrimitive(value: ClipPrimitivePlaneProps | ClipPrimitiveShapeProps): boolean;
|
|
3
4
|
export declare function extractClipVectorsFromLegacy(input: SpatialViewDefinitionProps): Array<ClipPrimitivePlaneProps | ClipPrimitiveShapeProps> | undefined;
|
|
5
|
+
export declare const clipVectorLegacyMappings: ((input: any, output: any) => void)[];
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { applyExtraction, extractArray2d, extractArrayConditionally, extractBoolean, extractNumber, extractObject, extractSimpleArray, simpleTypeOf, } from "./extractionUtilities.js";
|
|
2
|
+
export function isValidClipPrimitive(value) {
|
|
3
|
+
const hasPlanes = "planes" in value;
|
|
4
|
+
return (!hasPlanes || (value.planes && Object.keys(value.planes).length > 0));
|
|
5
|
+
}
|
|
2
6
|
export function extractClipVectorsFromLegacy(input) {
|
|
3
7
|
const viewDetails = input.jsonProperties?.viewDetails;
|
|
4
8
|
if (!viewDetails || !("clip" in viewDetails)) {
|
|
@@ -6,10 +10,7 @@ export function extractClipVectorsFromLegacy(input) {
|
|
|
6
10
|
}
|
|
7
11
|
const output = {};
|
|
8
12
|
applyExtraction(viewDetails, output, clipVectorLegacyMappings);
|
|
9
|
-
output.clipVectors = output.clipVectors?.filter(
|
|
10
|
-
const hasPlanes = "planes" in value;
|
|
11
|
-
return (!hasPlanes || (value.planes && Object.keys(value.planes).length > 0));
|
|
12
|
-
});
|
|
13
|
+
output.clipVectors = output.clipVectors?.filter(isValidClipPrimitive);
|
|
13
14
|
return output.clipVectors;
|
|
14
15
|
}
|
|
15
16
|
const clipPlaneLegacyMappings = [
|
|
@@ -31,7 +32,7 @@ const clipPrimitiveShapeLegacyMappings = [
|
|
|
31
32
|
extractBoolean("invisible"),
|
|
32
33
|
], "shape"),
|
|
33
34
|
];
|
|
34
|
-
const clipVectorLegacyMappings = [
|
|
35
|
+
export const clipVectorLegacyMappings = [
|
|
35
36
|
extractArrayConditionally([
|
|
36
37
|
{ discriminator: "planes", mappings: clipPrimitivePlaneLegacyMappings },
|
|
37
38
|
{ discriminator: "shape", mappings: clipPrimitiveShapeLegacyMappings },
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ViewITwin2d, ViewITwin3d } from "@itwin/saved-views-client";
|
|
2
|
+
export declare const extractViewDetails2d: (input: ViewITwin2d) => any;
|
|
3
|
+
export declare const extractViewDetails3d: (input: ViewITwin3d) => any;
|
|
4
|
+
export declare const viewDetailsMappings: import("./extractionUtilities.js").ExtractionFunc<void, void>[];
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { clipVectorMappings } from "./clipVectorsExtractor.js";
|
|
2
|
+
import { applyExtraction, extractArray, extractBoolean, extractNumber, extractSimpleArray, extractString, simpleTypeOf, } from "./extractionUtilities.js";
|
|
3
|
+
export const extractViewDetails2d = (input) => {
|
|
4
|
+
const viewDetails = input.viewDetails;
|
|
5
|
+
if (!viewDetails) {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
|
+
const output = {};
|
|
10
|
+
applyExtraction(viewDetails, output, viewDetailsMappings);
|
|
11
|
+
return output;
|
|
12
|
+
};
|
|
13
|
+
export const extractViewDetails3d = (input) => {
|
|
14
|
+
const viewDetails = input.viewDetails;
|
|
15
|
+
if (!viewDetails) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
19
|
+
const output = {};
|
|
20
|
+
applyExtraction(viewDetails, output, viewDetails3dMappings);
|
|
21
|
+
return output;
|
|
22
|
+
};
|
|
23
|
+
export const viewDetailsMappings = [
|
|
24
|
+
extractString("acs"),
|
|
25
|
+
extractNumber("aspectSkew"),
|
|
26
|
+
extractNumber("gridOrient"), // enum GridOrientationType
|
|
27
|
+
extractNumber("gridPerRef"),
|
|
28
|
+
extractNumber("gridSpaceX"),
|
|
29
|
+
extractNumber("gridSpaceY"),
|
|
30
|
+
// clip is already extracted in clipVectors property of the view
|
|
31
|
+
];
|
|
32
|
+
const modelClipGroupMappings = [
|
|
33
|
+
...clipVectorMappings,
|
|
34
|
+
extractSimpleArray(simpleTypeOf("string"), "models"),
|
|
35
|
+
];
|
|
36
|
+
const viewDetails3dMappings = [
|
|
37
|
+
...viewDetailsMappings,
|
|
38
|
+
extractBoolean("disable3dManipulations"),
|
|
39
|
+
extractArray(modelClipGroupMappings, "modelClipGroups"),
|
|
40
|
+
];
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SpatialViewDefinitionProps, ViewDefinition2dProps } from "@itwin/core-common";
|
|
2
|
+
import type { ViewDetails3dProps, ViewDetailsProps } from "@itwin/saved-views-client";
|
|
3
|
+
export declare function extractViewDetails2dFromLegacy(input: ViewDefinition2dProps): ViewDetailsProps | undefined;
|
|
4
|
+
export declare function extractViewDetails3dFromLegacy(input: SpatialViewDefinitionProps): ViewDetails3dProps | undefined;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { clipVectorLegacyMappings, isValidClipPrimitive, } from "./clipVectorsLegacyExtractor.js";
|
|
2
|
+
import { applyExtraction, extractArray, extractBoolean, extractSimpleArray, simpleTypeOf, } from "./extractionUtilities.js";
|
|
3
|
+
import { viewDetailsMappings } from "./viewDetailsExtractor.js";
|
|
4
|
+
export function extractViewDetails2dFromLegacy(input) {
|
|
5
|
+
const viewDetails = input.jsonProperties?.viewDetails;
|
|
6
|
+
if (!viewDetails) {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
const output = {};
|
|
10
|
+
applyExtraction(viewDetails, output, viewDetailsMappings);
|
|
11
|
+
return output;
|
|
12
|
+
}
|
|
13
|
+
export function extractViewDetails3dFromLegacy(input) {
|
|
14
|
+
const viewDetails = input.jsonProperties?.viewDetails;
|
|
15
|
+
if (!viewDetails) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
const output = {};
|
|
19
|
+
applyExtraction(viewDetails, output, viewDetails3dLegacyMappings);
|
|
20
|
+
// Filter out any plane clipVectors that have no planes actually defined
|
|
21
|
+
for (const clipGroup of output?.modelClipGroups ?? []) {
|
|
22
|
+
clipGroup.clipVectors = clipGroup.clipVectors?.filter(isValidClipPrimitive);
|
|
23
|
+
}
|
|
24
|
+
return viewDetails;
|
|
25
|
+
}
|
|
26
|
+
const modelClipGroupLegacyMappings = [
|
|
27
|
+
...clipVectorLegacyMappings,
|
|
28
|
+
extractSimpleArray(simpleTypeOf("string"), "models"),
|
|
29
|
+
];
|
|
30
|
+
const viewDetails3dLegacyMappings = [
|
|
31
|
+
...viewDetailsMappings,
|
|
32
|
+
extractBoolean("disable3dManipulations"),
|
|
33
|
+
extractArray(modelClipGroupLegacyMappings, "modelClipGroups"),
|
|
34
|
+
];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/saved-views-react",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -41,16 +41,16 @@
|
|
|
41
41
|
"@types/react": "^18.0.0",
|
|
42
42
|
"@types/recursive-readdir": "^2.2.2",
|
|
43
43
|
"@vitejs/plugin-react-swc": "^3.5.0",
|
|
44
|
-
"@vitest/coverage-v8": "^
|
|
44
|
+
"@vitest/coverage-v8": "^4.0.16",
|
|
45
45
|
"cpx2": "^5.0.0",
|
|
46
|
-
"happy-dom": "^
|
|
46
|
+
"happy-dom": "^20.0.0",
|
|
47
47
|
"npm-run-all": "^4.1.5",
|
|
48
48
|
"react": "^18.0.0",
|
|
49
49
|
"react-dom": "^18.0.0",
|
|
50
50
|
"recursive-readdir": "^2.2.3",
|
|
51
51
|
"typescript": "^5.5.4",
|
|
52
52
|
"vite": "^6.0.0",
|
|
53
|
-
"vitest": "^
|
|
53
|
+
"vitest": "^4.0.16"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
56
|
"@itwin/core-common": "^5.2.0",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"@itwin/itwinui-icons-react": "^2.9.0",
|
|
67
67
|
"@itwin/itwinui-react": "^3.15.0",
|
|
68
68
|
"fuse.js": "^6.6.2",
|
|
69
|
-
"@itwin/saved-views-client": "^0.
|
|
69
|
+
"@itwin/saved-views-client": "^0.6.1"
|
|
70
70
|
},
|
|
71
71
|
"scripts": {
|
|
72
72
|
"build": "run-p build:*",
|