@itwin/saved-views-react 0.2.1 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/LayeredDropdownMenu/LayeredDropdownMenu.css +11 -1
- package/lib/LayeredDropdownMenu/LayeredDropdownMenu.d.ts +3 -1
- package/lib/LayeredDropdownMenu/LayeredDropdownMenu.js +2 -2
- package/lib/SavedView.d.ts +2 -0
- package/lib/SavedViewTile/SavedViewOptions.d.ts +2 -0
- package/lib/SavedViewTile/SavedViewOptions.js +4 -4
- package/lib/SavedViewTile/SavedViewTile.css +8 -1
- package/lib/SavedViewTile/SavedViewTile.d.ts +5 -4
- package/lib/SavedViewTile/SavedViewTile.js +12 -14
- package/lib/SavedViewsClient/ITwinSavedViewsClient.js +6 -2
- package/lib/StickyExpandableBlock/StickyExpandableBlock.js +9 -1
- package/lib/api/clients/ISavedViewsClient.d.ts +5 -5
- package/lib/api/utilities/SavedViewTypes.d.ts +1 -1
- package/lib/api/utilities/translation/SavedViewTranslation.d.ts +19 -15
- package/lib/api/utilities/translation/SavedViewTranslation.js +177 -160
- package/lib/api/utilities/translation/displayStyleExtractor.js +55 -5
- package/lib/api/utilities/translation/viewExtractorSavedViewToLegacySavedView.d.ts +2 -19
- package/lib/api/utilities/translation/viewExtractorSavedViewToLegacySavedView.js +82 -133
- package/lib/captureSavedViewData.d.ts +4 -1
- package/lib/captureSavedViewData.js +12 -10
- package/lib/experimental.d.ts +3 -1
- package/lib/experimental.js +2 -1
- package/lib/useSavedViews.d.ts +2 -2
- package/lib/useSavedViews.js +76 -60
- package/package.json +3 -3
- package/lib/api/clients/IModelQueryClient.d.ts +0 -10
- package/lib/api/clients/IModelQueryClient.js +0 -45
- package/lib/api/utilities/translation/ModelsAndCategoriesHelper.d.ts +0 -3
- package/lib/api/utilities/translation/ModelsAndCategoriesHelper.js +0 -57
- package/lib/api/utilities/translation/urlConverter.d.ts +0 -7
- package/lib/api/utilities/translation/urlConverter.js +0 -42
|
@@ -3,181 +3,51 @@
|
|
|
3
3
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
import { IModelReadRpcInterface } from "@itwin/core-common";
|
|
6
|
-
import { DrawingViewState, EmphasizeElements, SheetViewState, SpatialViewState, } from "@itwin/core-frontend";
|
|
6
|
+
import { DisplayStyle3dState, DrawingViewState, EmphasizeElements, SheetViewState, SpatialViewState, } from "@itwin/core-frontend";
|
|
7
7
|
import { isViewDataITwin3d, isViewDataITwinDrawing, isViewDataITwinSheet, } from "@itwin/saved-views-client";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { getMissingCategories, getMissingModels } from "../../../captureSavedViewData.js";
|
|
9
|
+
import { isDrawingSavedView, isSavedView3d, isSheetSavedView, isSpatialSavedView, } from "../../clients/ISavedViewsClient.js";
|
|
10
10
|
import { SavedViewsExtensionHandlers } from "./SavedViewsExtensionHandlers.js";
|
|
11
|
-
import {
|
|
12
|
-
var ViewTypes;
|
|
13
|
-
(function (ViewTypes) {
|
|
14
|
-
ViewTypes[ViewTypes["SheetViewDefinition"] = 0] = "SheetViewDefinition";
|
|
15
|
-
ViewTypes[ViewTypes["ViewDefinition3d"] = 1] = "ViewDefinition3d";
|
|
16
|
-
ViewTypes[ViewTypes["DrawingViewDefinition"] = 2] = "DrawingViewDefinition";
|
|
17
|
-
})(ViewTypes || (ViewTypes = {}));
|
|
18
|
-
/**
|
|
19
|
-
* Extract the legacy saved view data from a legacy saved view response
|
|
20
|
-
* @param legacySavedViewResponse
|
|
21
|
-
* @returns SavedViewBase legacy view data
|
|
22
|
-
*/
|
|
23
|
-
function legacyViewFrom(legacySavedViewResponse) {
|
|
24
|
-
return legacySavedViewResponse.savedViewData.legacyView;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Converts a saved view response to a saved view response that includes a legacy view.
|
|
28
|
-
* @param savedViewResponse A saved view response with or without a legacy view.
|
|
29
|
-
* @param iModelConnection The {@link IModelConnection} for the saved view; used to query for additional information.
|
|
30
|
-
* @returns A {@link SavedViewRepresentation} that contains legacy saved view data.
|
|
31
|
-
*/
|
|
32
|
-
export async function translateSavedViewResponseToLegacySavedViewResponse(savedViewResponse, iModelConnection) {
|
|
33
|
-
const legacySavedView = await translateSavedViewToLegacySavedView(savedViewResponse, iModelConnection);
|
|
34
|
-
const legacySavedViewResponse = savedViewResponse;
|
|
35
|
-
legacySavedViewResponse.savedViewData.legacyView = legacySavedView;
|
|
36
|
-
return legacySavedViewResponse;
|
|
37
|
-
}
|
|
11
|
+
import { savedViewITwin3dToLegacy3dSavedView, savedViewItwinDrawingToLegacyDrawingView, savedViewItwinSheetToLegacySheetSavedView, } from "./viewExtractorSavedViewToLegacySavedView.js";
|
|
38
12
|
/**
|
|
39
13
|
* Converts a legacy saved view (response) to an iTwin.js ViewState.
|
|
40
|
-
* @param
|
|
41
|
-
* @param
|
|
42
|
-
* @
|
|
14
|
+
* @param legacySavedView a saved view response that includes a legacy view
|
|
15
|
+
* @param iModel the {@linkcode IModelConnection} for the saved view; used to query for additional information
|
|
16
|
+
* @param useHiddenModelsAndCategories when explicitly set to `false`, the returned {@linkcode ViewState} does not have
|
|
17
|
+
* populated category and model selectors
|
|
18
|
+
* @returns a {@linkcode ViewState} with the saved view applied
|
|
43
19
|
*/
|
|
44
|
-
export async function translateLegacySavedViewToITwinJsViewState(
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
await applyHiddenModelsAndCategories(viewState, legacySavedView, iModelConnection);
|
|
20
|
+
export async function translateLegacySavedViewToITwinJsViewState(legacySavedView, iModel, useHiddenModelsAndCategories = true) {
|
|
21
|
+
const viewState = await createViewState(iModel, legacySavedView);
|
|
22
|
+
if (viewState && useHiddenModelsAndCategories) {
|
|
23
|
+
await applyHiddenModelsAndCategories(iModel, viewState, legacySavedView);
|
|
49
24
|
}
|
|
50
25
|
return viewState;
|
|
51
26
|
}
|
|
52
|
-
|
|
53
|
-
* Apply extension data (overrides) onto the supplied viewport. Only works with legacy-formatted extension data.
|
|
54
|
-
* @param viewport The {@link ScreenViewport} used to display the saved view and iModel.
|
|
55
|
-
* @param legacySavedViewResponse A saved view response that includes a legacy view.
|
|
56
|
-
*/
|
|
57
|
-
export async function applyExtensionsToViewport(viewport, legacySavedViewResponse) {
|
|
58
|
-
if (!legacySavedViewResponse) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
await applyExtensionOverrides(legacyViewFrom(legacySavedViewResponse), viewport);
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Creates legacy saved view data from a saved view response.
|
|
65
|
-
* @param savedViewResponse A saved view response with or without a legacy view.
|
|
66
|
-
* @param iModelConnection The {@link IModelConnection} for the saved view; used to query for additional information.
|
|
67
|
-
* @resolves The saved views formatted as a legacy SavedViewBase.
|
|
68
|
-
*/
|
|
69
|
-
async function translateSavedViewToLegacySavedView(savedViewResponse, iModelConnection) {
|
|
70
|
-
const savedViewData = savedViewResponse.savedViewData;
|
|
71
|
-
// If the legacy view already exists, use that; otherwise, use extraction code to get the legacy view
|
|
72
|
-
let legacySavedView;
|
|
73
|
-
if (savedViewData.legacyView) {
|
|
74
|
-
savedViewResponse = cleanLegacyViewModelSelectorPropsModels(savedViewResponse);
|
|
75
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
76
|
-
legacySavedView = savedViewData.legacyView;
|
|
77
|
-
// legacySavedView.id = savedView.id; // Change legacy sv id to comboId
|
|
78
|
-
}
|
|
79
|
-
else if (isViewDataITwin3d(savedViewData)) {
|
|
80
|
-
const iModelViewData = await fetchIModelViewData(ViewTypes.ViewDefinition3d, iModelConnection);
|
|
81
|
-
const actual = savedViewITwin3dToLegacy3dSavedView(savedViewResponse, iModelViewData);
|
|
82
|
-
legacySavedView = actual;
|
|
83
|
-
}
|
|
84
|
-
else if (isViewDataITwinDrawing(savedViewData)) {
|
|
85
|
-
const iModelViewData = await fetchIModelViewData(ViewTypes.DrawingViewDefinition, iModelConnection);
|
|
86
|
-
const actual = savedViewItwinDrawingToLegacyDrawingView(savedViewResponse, iModelViewData);
|
|
87
|
-
legacySavedView = actual;
|
|
88
|
-
}
|
|
89
|
-
else if (isViewDataITwinSheet(savedViewData)) {
|
|
90
|
-
const iModelViewData = await fetchIModelViewData(ViewTypes.SheetViewDefinition, iModelConnection);
|
|
91
|
-
const actual = savedViewItwinSheetToLegacySheetSavedView(savedViewResponse, iModelViewData);
|
|
92
|
-
legacySavedView = actual;
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
throw new Error("Could not translate itwin-saved-views API response to a SavedViewBaseSetting");
|
|
96
|
-
}
|
|
97
|
-
// Append all extensions to the saved view
|
|
98
|
-
legacySavedView.extensions = new Map();
|
|
99
|
-
for (const ext of savedViewResponse.extensions) {
|
|
100
|
-
if (ext.extensionName && ext.data) {
|
|
101
|
-
legacySavedView.extensions.set(ext.extensionName, ext.data);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
return legacySavedView;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Grabs Seeded SavedView From IModel
|
|
108
|
-
* @throws if iModel Connection of App is invalid
|
|
109
|
-
* @returns iModelViewData
|
|
110
|
-
*/
|
|
111
|
-
async function fetchIModelViewData(viewClassName, iModelConnection) {
|
|
112
|
-
const viewId = await getDefaultViewIdFromClassName(iModelConnection, viewClassName);
|
|
113
|
-
const seedViewState = await iModelConnection.views.load(viewId);
|
|
114
|
-
return seedViewState;
|
|
115
|
-
}
|
|
116
|
-
async function getDefaultViewIdFromClassName(iModelConnection, savedViewType) {
|
|
117
|
-
let viewFullName = undefined;
|
|
118
|
-
switch (savedViewType) {
|
|
119
|
-
case ViewTypes.ViewDefinition3d:
|
|
120
|
-
viewFullName = SpatialViewState.classFullName;
|
|
121
|
-
break;
|
|
122
|
-
case ViewTypes.DrawingViewDefinition:
|
|
123
|
-
viewFullName = DrawingViewState.classFullName;
|
|
124
|
-
break;
|
|
125
|
-
case ViewTypes.SheetViewDefinition:
|
|
126
|
-
viewFullName = SheetViewState.classFullName;
|
|
127
|
-
break;
|
|
128
|
-
default:
|
|
129
|
-
throw new Error("Unrecognized View Type");
|
|
130
|
-
}
|
|
131
|
-
const viewId = await iModelConnection.views.queryDefaultViewId();
|
|
132
|
-
const params = {};
|
|
133
|
-
params.from = viewFullName;
|
|
134
|
-
params.where = "ECInstanceId=" + viewId;
|
|
135
|
-
// Check validity of default view
|
|
136
|
-
const viewProps = await IModelReadRpcInterface.getClient().queryElementProps(iModelConnection.getRpcProps(), params);
|
|
137
|
-
if (viewProps.length === 0) {
|
|
138
|
-
// Return the first view we can find
|
|
139
|
-
const viewList = await iModelConnection.views.getViewList({
|
|
140
|
-
from: viewFullName,
|
|
141
|
-
wantPrivate: false,
|
|
142
|
-
});
|
|
143
|
-
if (viewList.length === 0) {
|
|
144
|
-
return "";
|
|
145
|
-
}
|
|
146
|
-
return viewList[0].id;
|
|
147
|
-
}
|
|
148
|
-
return viewId;
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Creates a ViewState from a SavedView object returned by the SavedViewsClient
|
|
152
|
-
* @param iModelConnection IModelConnection to use for requesting source view states
|
|
153
|
-
* @param savedView SavedView object obtained from SavedViewsClient
|
|
154
|
-
*/
|
|
155
|
-
async function createViewState(iModelConnection, savedView) {
|
|
27
|
+
async function createViewState(iModel, savedView) {
|
|
156
28
|
if (isSpatialSavedView(savedView)) {
|
|
157
|
-
return
|
|
29
|
+
return createSpatialViewState(iModel, savedView);
|
|
158
30
|
}
|
|
159
|
-
|
|
160
|
-
return
|
|
31
|
+
if (isDrawingSavedView(savedView)) {
|
|
32
|
+
return createDrawingViewState(iModel, savedView);
|
|
161
33
|
}
|
|
162
|
-
|
|
163
|
-
return
|
|
34
|
+
if (isSheetSavedView(savedView)) {
|
|
35
|
+
return createSheetViewState(iModel, savedView);
|
|
164
36
|
}
|
|
165
37
|
return undefined;
|
|
166
38
|
}
|
|
167
|
-
|
|
168
|
-
async function _createSpatialViewState(iModelConnection, savedView) {
|
|
39
|
+
async function createSpatialViewState(iModel, savedView) {
|
|
169
40
|
const props = {
|
|
170
41
|
viewDefinitionProps: savedView.viewDefinitionProps,
|
|
171
42
|
categorySelectorProps: savedView.categorySelectorProps,
|
|
172
43
|
modelSelectorProps: savedView.modelSelectorProps,
|
|
173
44
|
displayStyleProps: savedView.displayStyleProps,
|
|
174
45
|
};
|
|
175
|
-
const viewState = SpatialViewState.createFromProps(props,
|
|
46
|
+
const viewState = SpatialViewState.createFromProps(props, iModel);
|
|
176
47
|
await viewState.load();
|
|
177
48
|
return viewState;
|
|
178
49
|
}
|
|
179
|
-
|
|
180
|
-
async function _createDrawingViewState(iModelConnection, savedView) {
|
|
50
|
+
async function createDrawingViewState(iModelConnection, savedView) {
|
|
181
51
|
const props = {
|
|
182
52
|
viewDefinitionProps: savedView.viewDefinitionProps,
|
|
183
53
|
categorySelectorProps: savedView.categorySelectorProps,
|
|
@@ -187,10 +57,8 @@ async function _createDrawingViewState(iModelConnection, savedView) {
|
|
|
187
57
|
await viewState.load();
|
|
188
58
|
return viewState;
|
|
189
59
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
if (savedView.sheetProps === undefined ||
|
|
193
|
-
savedView.sheetAttachments === undefined) {
|
|
60
|
+
async function createSheetViewState(iModelConnection, savedView) {
|
|
61
|
+
if (savedView.sheetProps === undefined || savedView.sheetAttachments === undefined) {
|
|
194
62
|
return undefined;
|
|
195
63
|
}
|
|
196
64
|
const props = {
|
|
@@ -204,12 +72,55 @@ async function _createSheetViewState(iModelConnection, savedView) {
|
|
|
204
72
|
await viewState.load();
|
|
205
73
|
return viewState;
|
|
206
74
|
}
|
|
75
|
+
async function applyHiddenModelsAndCategories(iModel, viewState, savedView) {
|
|
76
|
+
if (!legacyViewHasValidHiddenModelsAndCategories(savedView)) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const visible = await getVisibleModelsAndCategories(savedView, iModel);
|
|
80
|
+
if (visible.categories) {
|
|
81
|
+
viewState.categorySelector.addCategories(visible.categories);
|
|
82
|
+
}
|
|
83
|
+
if (viewState.isSpatialView() && visible.models) {
|
|
84
|
+
viewState.modelSelector.addModels(visible.models);
|
|
85
|
+
}
|
|
86
|
+
await viewState.load();
|
|
87
|
+
}
|
|
88
|
+
function legacyViewHasValidHiddenModelsAndCategories(savedView) {
|
|
89
|
+
if (isSavedView3d(savedView)) {
|
|
90
|
+
return !!(savedView.hiddenCategories && savedView.hiddenModels);
|
|
91
|
+
}
|
|
92
|
+
return !!savedView.hiddenCategories;
|
|
93
|
+
}
|
|
94
|
+
async function getVisibleModelsAndCategories(savedView, iModel) {
|
|
95
|
+
return {
|
|
96
|
+
models: isSavedView3d(savedView) ? await getMissingModels(iModel, new Set(savedView.hiddenModels)) : undefined,
|
|
97
|
+
categories: await getMissingCategories(iModel, new Set(savedView.hiddenCategories)),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
export async function augmentWithScheduleScript(iModel, savedView, viewState) {
|
|
101
|
+
if (!savedView.displayStyleProps.jsonProperties?.styles?.timePoint) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
const viewList = await iModel.views.getViewList({ wantPrivate: false });
|
|
106
|
+
const viewStates = await Promise.all(viewList.map(({ id }) => iModel.views.load(id)));
|
|
107
|
+
const scheduleViewState = viewStates.find(({ scheduleScript }) => scheduleScript && !scheduleScript.duration.isNull);
|
|
108
|
+
if (scheduleViewState) {
|
|
109
|
+
savedView.displayStyleProps.id = scheduleViewState.id;
|
|
110
|
+
viewState.displayStyle = new DisplayStyle3dState(savedView.displayStyleProps, iModel, scheduleViewState.displayStyle);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
207
118
|
/**
|
|
208
|
-
* Apply overrides onto the supplied
|
|
209
|
-
* @param
|
|
210
|
-
* @param
|
|
119
|
+
* Apply extension data (overrides) onto the supplied viewport. Only works with legacy-formatted extension data.
|
|
120
|
+
* @param viewport The {@link Viewport} used to display the saved view and iModel.
|
|
121
|
+
* @param legacySavedView A saved view response that includes a legacy view.
|
|
211
122
|
*/
|
|
212
|
-
async function
|
|
123
|
+
export async function applyExtensionsToViewport(viewport, legacySavedView) {
|
|
213
124
|
// Clear the current if there's any (this should always happen, even if there are no extensions)
|
|
214
125
|
if (EmphasizeElements.get(viewport)) {
|
|
215
126
|
EmphasizeElements.clear(viewport);
|
|
@@ -227,3 +138,109 @@ async function applyExtensionOverrides(legacySavedView, viewport) {
|
|
|
227
138
|
}
|
|
228
139
|
}
|
|
229
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Creates legacy saved view data from a saved view response.
|
|
143
|
+
* @param savedViewResponse A saved view response with or without a legacy view.
|
|
144
|
+
* @param iModel The {@link IModelConnection} for the saved view; used to query for additional information.
|
|
145
|
+
* @resolves The saved views formatted as a legacy SavedViewBase.
|
|
146
|
+
*/
|
|
147
|
+
export async function translateSavedViewToLegacySavedView(iModel, savedViewResponse) {
|
|
148
|
+
const savedViewData = savedViewResponse.savedViewData;
|
|
149
|
+
// If the legacy view already exists, use that; otherwise, use extraction code to get the legacy view
|
|
150
|
+
let legacySavedView;
|
|
151
|
+
if (savedViewData.legacyView) {
|
|
152
|
+
legacySavedView = savedViewData.legacyView;
|
|
153
|
+
if (isSavedView3d(legacySavedView)) {
|
|
154
|
+
legacySavedView.modelSelectorProps.models = legacySavedView.modelSelectorProps.models.filter((model) => !!model);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else if (isViewDataITwin3d(savedViewData)) {
|
|
158
|
+
const viewState = await fetchIModelViewData(iModel, ViewTypes.ViewDefinition3d);
|
|
159
|
+
legacySavedView = savedViewITwin3dToLegacy3dSavedView(savedViewResponse, viewState);
|
|
160
|
+
}
|
|
161
|
+
else if (isViewDataITwinDrawing(savedViewData)) {
|
|
162
|
+
const viewState = await fetchIModelViewData(iModel, ViewTypes.DrawingViewDefinition);
|
|
163
|
+
legacySavedView = savedViewItwinDrawingToLegacyDrawingView(savedViewResponse, viewState);
|
|
164
|
+
}
|
|
165
|
+
else if (isViewDataITwinSheet(savedViewData)) {
|
|
166
|
+
const viewState = await fetchIModelViewData(iModel, ViewTypes.SheetViewDefinition);
|
|
167
|
+
legacySavedView = savedViewItwinSheetToLegacySheetSavedView(savedViewResponse, viewState);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
throw new Error("Could not translate itwin-saved-views API response to a SavedViewBaseSetting");
|
|
171
|
+
}
|
|
172
|
+
// Append all extensions to the saved view
|
|
173
|
+
legacySavedView.extensions = new Map();
|
|
174
|
+
for (const { extensionName, data } of savedViewResponse.extensions ?? []) {
|
|
175
|
+
if (extensionName && data) {
|
|
176
|
+
legacySavedView.extensions.set(extensionName, data);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return legacySavedView;
|
|
180
|
+
}
|
|
181
|
+
async function fetchIModelViewData(iModel, viewClassName) {
|
|
182
|
+
if (iModel.isBlankConnection()) {
|
|
183
|
+
return manufactureEmptyViewState(iModel, viewClassName);
|
|
184
|
+
}
|
|
185
|
+
const viewId = await getDefaultViewIdFromClassName(iModel, viewClassName);
|
|
186
|
+
if (viewId === "") {
|
|
187
|
+
return manufactureEmptyViewState(iModel, viewClassName);
|
|
188
|
+
}
|
|
189
|
+
return iModel.views.load(viewId);
|
|
190
|
+
}
|
|
191
|
+
function manufactureEmptyViewState(iModel, viewClassName) {
|
|
192
|
+
const blankViewState = SpatialViewState.createBlank(iModel, { x: 0, y: 0, z: 0 }, { x: 0, y: 0, z: 0 });
|
|
193
|
+
if (viewClassName === ViewTypes.ViewDefinition3d) {
|
|
194
|
+
return blankViewState;
|
|
195
|
+
}
|
|
196
|
+
const blankViewStateProps = {
|
|
197
|
+
viewDefinitionProps: blankViewState.toJSON(),
|
|
198
|
+
categorySelectorProps: blankViewState.categorySelector.toJSON(),
|
|
199
|
+
displayStyleProps: blankViewState.displayStyle.toJSON(),
|
|
200
|
+
};
|
|
201
|
+
switch (viewClassName) {
|
|
202
|
+
case ViewTypes.DrawingViewDefinition:
|
|
203
|
+
return DrawingViewState.createFromProps(blankViewStateProps, iModel);
|
|
204
|
+
case ViewTypes.SheetViewDefinition:
|
|
205
|
+
return SheetViewState.createFromProps(blankViewStateProps, iModel);
|
|
206
|
+
default:
|
|
207
|
+
return blankViewState;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
async function getDefaultViewIdFromClassName(iModel, savedViewType) {
|
|
211
|
+
let viewFullName = undefined;
|
|
212
|
+
switch (savedViewType) {
|
|
213
|
+
case ViewTypes.ViewDefinition3d:
|
|
214
|
+
viewFullName = SpatialViewState.classFullName;
|
|
215
|
+
break;
|
|
216
|
+
case ViewTypes.DrawingViewDefinition:
|
|
217
|
+
viewFullName = DrawingViewState.classFullName;
|
|
218
|
+
break;
|
|
219
|
+
case ViewTypes.SheetViewDefinition:
|
|
220
|
+
viewFullName = SheetViewState.classFullName;
|
|
221
|
+
break;
|
|
222
|
+
default:
|
|
223
|
+
throw new Error("Unrecognized View Type");
|
|
224
|
+
}
|
|
225
|
+
// Check validity of default view
|
|
226
|
+
const viewId = await iModel.views.queryDefaultViewId();
|
|
227
|
+
const params = {};
|
|
228
|
+
params.from = viewFullName;
|
|
229
|
+
params.where = "ECInstanceId=" + viewId;
|
|
230
|
+
const viewProps = await IModelReadRpcInterface.getClient().queryElementProps(iModel.getRpcProps(), params);
|
|
231
|
+
if (viewProps.length > 0) {
|
|
232
|
+
return viewId;
|
|
233
|
+
}
|
|
234
|
+
// Return the first view we can find
|
|
235
|
+
const viewList = await iModel.views.getViewList({ from: viewFullName, wantPrivate: false });
|
|
236
|
+
if (viewList.length === 0) {
|
|
237
|
+
return "";
|
|
238
|
+
}
|
|
239
|
+
return viewList[0].id;
|
|
240
|
+
}
|
|
241
|
+
var ViewTypes;
|
|
242
|
+
(function (ViewTypes) {
|
|
243
|
+
ViewTypes[ViewTypes["SheetViewDefinition"] = 0] = "SheetViewDefinition";
|
|
244
|
+
ViewTypes[ViewTypes["ViewDefinition3d"] = 1] = "ViewDefinition3d";
|
|
245
|
+
ViewTypes[ViewTypes["DrawingViewDefinition"] = 2] = "DrawingViewDefinition";
|
|
246
|
+
})(ViewTypes || (ViewTypes = {}));
|
|
@@ -77,6 +77,18 @@ const displayStyleSubCategoryMappings = [
|
|
|
77
77
|
extractNumber("transp", "transparency"),
|
|
78
78
|
extractNumber("transpFill", "transparencyFill"),
|
|
79
79
|
];
|
|
80
|
+
const displayStyleSubCategoryLegacyMappings = [
|
|
81
|
+
extractString("subCategory"),
|
|
82
|
+
extractColorLegacy("color"),
|
|
83
|
+
extractColorLegacy("fill"),
|
|
84
|
+
extractBoolean("invisible"),
|
|
85
|
+
extractNumber("weight"),
|
|
86
|
+
extractString("style"),
|
|
87
|
+
extractNumber("priority"),
|
|
88
|
+
extractString("material"),
|
|
89
|
+
extractNumber("transp", "transparency"),
|
|
90
|
+
extractNumber("transpFill", "transparencyFill"),
|
|
91
|
+
];
|
|
80
92
|
export const featureAppearanceMappings = [
|
|
81
93
|
extractRGB("rgb"),
|
|
82
94
|
extractNumber("weight"),
|
|
@@ -99,7 +111,10 @@ const displayStyleModelAppearanceMappings = [
|
|
|
99
111
|
...featureAppearanceMappings,
|
|
100
112
|
extractString("modelId"),
|
|
101
113
|
];
|
|
102
|
-
const displayStyleModelAppearanceLegacyMappings = [
|
|
114
|
+
const displayStyleModelAppearanceLegacyMappings = [
|
|
115
|
+
...featureAppearanceLegacyMappings,
|
|
116
|
+
extractString("modelId"),
|
|
117
|
+
];
|
|
103
118
|
const contextRealityModelsMappings = [
|
|
104
119
|
extractObject([
|
|
105
120
|
extractString("provider"),
|
|
@@ -210,6 +225,20 @@ const mapImageryMapping = [
|
|
|
210
225
|
},
|
|
211
226
|
], "overlayLayers"),
|
|
212
227
|
];
|
|
228
|
+
const mapImageryLegacyMapping = [
|
|
229
|
+
extractConditionally([
|
|
230
|
+
{ discriminator: isAnyColorFormat, mappings: extractColorLegacy },
|
|
231
|
+
{ discriminator: "url", mappings: baseMapLayerPropsMapping },
|
|
232
|
+
], "backgroundBase"),
|
|
233
|
+
extractArrayConditionally([
|
|
234
|
+
{ discriminator: "modelId", mappings: modelMapLayerPropsMapping },
|
|
235
|
+
{ discriminator: "url", mappings: imageMapLayerPropsMapping },
|
|
236
|
+
], "backgroundLayers"),
|
|
237
|
+
extractArrayConditionally([
|
|
238
|
+
{ discriminator: "modelId", mappings: modelMapLayerPropsMapping },
|
|
239
|
+
{ discriminator: "url", mappings: imageMapLayerPropsMapping },
|
|
240
|
+
], "overlayLayers"),
|
|
241
|
+
];
|
|
213
242
|
const viewFlagOverridesMapping = [
|
|
214
243
|
extractNumber("renderMode"),
|
|
215
244
|
extractBoolean("dimensions"),
|
|
@@ -312,11 +341,11 @@ const displayStylesLegacyMapping = [
|
|
|
312
341
|
extractNumber("monochromeMode"),
|
|
313
342
|
extractString("renderTimeline"),
|
|
314
343
|
extractNumber("timePoint"),
|
|
315
|
-
extractArray(
|
|
344
|
+
extractArray(displayStyleSubCategoryLegacyMappings, "subCategoryOvr", "subCategoryOverrides"),
|
|
316
345
|
extractObject(backgroundMapMappings, "backgroundMap"),
|
|
317
346
|
extractArray(contextRealityModelsLegacyMappings, "contextRealityModels"),
|
|
318
347
|
extractStringOrArray("excludedElements"),
|
|
319
|
-
extractObject(
|
|
348
|
+
extractObject(mapImageryLegacyMapping, "mapImagery"),
|
|
320
349
|
extractArray(displayStyleModelAppearanceLegacyMappings, "modelOvr", "modelOverrides"),
|
|
321
350
|
extractObject(clipStyleLegacyMappings, "clipStyle"),
|
|
322
351
|
extractArray(displayStylePlanarClipMaskMappings, "planarClipOvr", "planarClipOverrides"),
|
|
@@ -394,6 +423,9 @@ const ambientOcclusionMappings = [
|
|
|
394
423
|
const solarShadowMappings = [
|
|
395
424
|
extractColor("color"),
|
|
396
425
|
];
|
|
426
|
+
const solarShadowLegacyMappings = [
|
|
427
|
+
extractColorLegacy("color"),
|
|
428
|
+
];
|
|
397
429
|
const lightsMappings = [
|
|
398
430
|
extractObject([extractNumber("intensity")], "portrait"),
|
|
399
431
|
extractObject([
|
|
@@ -412,6 +444,24 @@ const lightsMappings = [
|
|
|
412
444
|
extractNumber("numCels"),
|
|
413
445
|
extractObject([extractNumber("intensity"), extractBoolean("invert")], "fresnel"),
|
|
414
446
|
];
|
|
447
|
+
const lightsLegacyMappings = [
|
|
448
|
+
extractObject([extractNumber("intensity")], "portrait"),
|
|
449
|
+
extractObject([
|
|
450
|
+
extractNumber("intensity"),
|
|
451
|
+
extractSimpleArray(simpleTypeOf("number"), "direction"),
|
|
452
|
+
extractBoolean("alwaysEnabled"),
|
|
453
|
+
extractNumber("timePoint"),
|
|
454
|
+
], "solar"),
|
|
455
|
+
extractObject([
|
|
456
|
+
extractColorLegacy("upperColor"),
|
|
457
|
+
extractColorLegacy("lowerColor"),
|
|
458
|
+
extractNumber("intensity"),
|
|
459
|
+
], "hemisphere"),
|
|
460
|
+
extractObject([extractColorLegacy("color"), extractNumber("intensity")], "ambient"),
|
|
461
|
+
extractNumber("specularIntensity"),
|
|
462
|
+
extractNumber("numCels"),
|
|
463
|
+
extractObject([extractNumber("intensity"), extractBoolean("invert")], "fresnel"),
|
|
464
|
+
];
|
|
415
465
|
const planProjectionSettingsMappings = [
|
|
416
466
|
extractNumber("elevation"),
|
|
417
467
|
extractNumber("transparency"),
|
|
@@ -430,8 +480,8 @@ const displayStyle3dLegacyMapping = [
|
|
|
430
480
|
...displayStylesLegacyMapping,
|
|
431
481
|
extractObject(environmentLegacyMappings, "environment"),
|
|
432
482
|
extractObject(ambientOcclusionMappings, "ao", "ambientOcclusion"),
|
|
433
|
-
extractObject(
|
|
434
|
-
extractObject(
|
|
483
|
+
extractObject(solarShadowLegacyMappings, "solarShadows"),
|
|
484
|
+
extractObject(lightsLegacyMappings, "lights"),
|
|
435
485
|
extractPlainTypedMap(planProjectionSettingsMappings, simpleTypeOf("string"), "planProjections"),
|
|
436
486
|
];
|
|
437
487
|
/**
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { SheetViewState, type DrawingViewState, type SpatialViewState } from "@itwin/core-frontend";
|
|
2
2
|
import type { SavedViewRepresentation } from "@itwin/saved-views-client";
|
|
3
|
-
import type {
|
|
4
|
-
|
|
5
|
-
* Extracts id from href
|
|
6
|
-
* @param href
|
|
7
|
-
*/
|
|
8
|
-
export declare const extractIdFromHref: (href: string) => string | undefined;
|
|
3
|
+
import type { LegacySavedView3d, LegacySavedView2d } from "../SavedViewTypes.js";
|
|
4
|
+
export declare function savedViewITwin3dToLegacy3dSavedView(savedViewRsp: SavedViewRepresentation, seedSpatialViewState: SpatialViewState): LegacySavedView3d;
|
|
9
5
|
/**
|
|
10
6
|
* Transform a ViewDataITwinDrawing into a legacy SavedView if possible
|
|
11
7
|
* @param savedViewRsp
|
|
@@ -20,16 +16,3 @@ export declare function savedViewItwinDrawingToLegacyDrawingView(savedViewRsp: S
|
|
|
20
16
|
* @returns SavedView2d
|
|
21
17
|
*/
|
|
22
18
|
export declare function savedViewItwinSheetToLegacySheetSavedView(savedViewRsp: SavedViewRepresentation, seedSheetViewState: SheetViewState): LegacySavedView2d;
|
|
23
|
-
/**
|
|
24
|
-
* Transform a ViewDataItwin3d into a legacy SavedView if possible
|
|
25
|
-
* @param savedViewRsp
|
|
26
|
-
* @param seedSpatialViewState
|
|
27
|
-
* @returns SavedView
|
|
28
|
-
*/
|
|
29
|
-
export declare function savedViewITwin3dToLegacy3dSavedView(savedViewRsp: SavedViewRepresentation, seedSpatialViewState: SpatialViewState): LegacySavedView;
|
|
30
|
-
/**
|
|
31
|
-
* removes null and undefined from legacy view model selectors props models
|
|
32
|
-
* @param savedView
|
|
33
|
-
* @returns SavedViewWithData
|
|
34
|
-
*/
|
|
35
|
-
export declare const cleanLegacyViewModelSelectorPropsModels: (savedView: SavedViewRepresentation) => SavedViewRepresentation;
|