@itwin/saved-views-react 0.2.1 → 0.3.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 (31) hide show
  1. package/lib/LayeredDropdownMenu/LayeredDropdownMenu.css +5 -1
  2. package/lib/LayeredDropdownMenu/LayeredDropdownMenu.d.ts +3 -1
  3. package/lib/LayeredDropdownMenu/LayeredDropdownMenu.js +2 -2
  4. package/lib/SavedView.d.ts +2 -0
  5. package/lib/SavedViewTile/SavedViewOptions.d.ts +2 -0
  6. package/lib/SavedViewTile/SavedViewOptions.js +4 -4
  7. package/lib/SavedViewTile/SavedViewTile.css +8 -1
  8. package/lib/SavedViewTile/SavedViewTile.d.ts +5 -4
  9. package/lib/SavedViewTile/SavedViewTile.js +12 -14
  10. package/lib/SavedViewsClient/ITwinSavedViewsClient.js +6 -2
  11. package/lib/StickyExpandableBlock/StickyExpandableBlock.js +9 -1
  12. package/lib/api/clients/ISavedViewsClient.d.ts +5 -5
  13. package/lib/api/utilities/SavedViewTypes.d.ts +1 -1
  14. package/lib/api/utilities/translation/SavedViewTranslation.d.ts +19 -15
  15. package/lib/api/utilities/translation/SavedViewTranslation.js +174 -160
  16. package/lib/api/utilities/translation/displayStyleExtractor.js +55 -5
  17. package/lib/api/utilities/translation/viewExtractorSavedViewToLegacySavedView.d.ts +2 -19
  18. package/lib/api/utilities/translation/viewExtractorSavedViewToLegacySavedView.js +82 -133
  19. package/lib/captureSavedViewData.d.ts +4 -1
  20. package/lib/captureSavedViewData.js +12 -10
  21. package/lib/experimental.d.ts +3 -1
  22. package/lib/experimental.js +2 -1
  23. package/lib/useSavedViews.d.ts +2 -2
  24. package/lib/useSavedViews.js +76 -60
  25. package/package.json +3 -3
  26. package/lib/api/clients/IModelQueryClient.d.ts +0 -10
  27. package/lib/api/clients/IModelQueryClient.js +0 -45
  28. package/lib/api/utilities/translation/ModelsAndCategoriesHelper.d.ts +0 -3
  29. package/lib/api/utilities/translation/ModelsAndCategoriesHelper.js +0 -57
  30. package/lib/api/utilities/translation/urlConverter.d.ts +0 -7
  31. 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 { isDrawingSavedView, isSheetSavedView, isSpatialSavedView } from "../../clients/ISavedViewsClient.js";
9
- import { applyHiddenModelsAndCategories } from "./ModelsAndCategoriesHelper.js";
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 { cleanLegacyViewModelSelectorPropsModels, savedViewITwin3dToLegacy3dSavedView, savedViewItwinDrawingToLegacyDrawingView, savedViewItwinSheetToLegacySheetSavedView, } from "./viewExtractorSavedViewToLegacySavedView.js";
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 legacySavedViewResponse A saved view response that includes a legacy view.
41
- * @param iModelConnection The {@link IModelConnection} for the saved view; used to query for additional information.
42
- * @returns A {@link ViewState} with the saved view applied.
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(legacySavedViewResponse, iModelConnection) {
45
- const legacySavedView = legacyViewFrom(legacySavedViewResponse);
46
- const viewState = await createViewState(iModelConnection, legacySavedView);
47
- if (viewState) {
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 _createSpatialViewState(iModelConnection, savedView);
29
+ return createSpatialViewState(iModel, savedView);
158
30
  }
159
- else if (isDrawingSavedView(savedView)) {
160
- return _createDrawingViewState(iModelConnection, savedView);
31
+ if (isDrawingSavedView(savedView)) {
32
+ return createDrawingViewState(iModel, savedView);
161
33
  }
162
- else if (isSheetSavedView(savedView)) {
163
- return _createSheetViewState(iModelConnection, savedView);
34
+ if (isSheetSavedView(savedView)) {
35
+ return createSheetViewState(iModel, savedView);
164
36
  }
165
37
  return undefined;
166
38
  }
167
- /** Creates a spatial view state from the saved view object props */
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, iModelConnection);
46
+ const viewState = SpatialViewState.createFromProps(props, iModel);
176
47
  await viewState.load();
177
48
  return viewState;
178
49
  }
179
- /** Creates a drawing view state from the data object */
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
- /** Creates a sheet view state from the data object */
191
- async function _createSheetViewState(iModelConnection, savedView) {
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 viewportbased on extension data. Only works with legacy-formatted extension data.
209
- * @param legacySavedView A legacy saved view.
210
- * @param viewport The {@link ScreenViewport} used to display the saved view and iModel.
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 applyExtensionOverrides(legacySavedView, viewport) {
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,106 @@ 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
+ return iModel.views.load(viewId);
187
+ }
188
+ function manufactureEmptyViewState(iModel, viewClassName) {
189
+ const blankViewState = SpatialViewState.createBlank(iModel, { x: 0, y: 0, z: 0 }, { x: 0, y: 0, z: 0 });
190
+ if (viewClassName === ViewTypes.ViewDefinition3d) {
191
+ return blankViewState;
192
+ }
193
+ const blankViewStateProps = {
194
+ viewDefinitionProps: blankViewState.toJSON(),
195
+ categorySelectorProps: blankViewState.categorySelector.toJSON(),
196
+ displayStyleProps: blankViewState.displayStyle.toJSON(),
197
+ };
198
+ switch (viewClassName) {
199
+ case ViewTypes.DrawingViewDefinition:
200
+ return DrawingViewState.createFromProps(blankViewStateProps, iModel);
201
+ case ViewTypes.SheetViewDefinition:
202
+ return SheetViewState.createFromProps(blankViewStateProps, iModel);
203
+ default:
204
+ return blankViewState;
205
+ }
206
+ }
207
+ async function getDefaultViewIdFromClassName(iModel, savedViewType) {
208
+ let viewFullName = undefined;
209
+ switch (savedViewType) {
210
+ case ViewTypes.ViewDefinition3d:
211
+ viewFullName = SpatialViewState.classFullName;
212
+ break;
213
+ case ViewTypes.DrawingViewDefinition:
214
+ viewFullName = DrawingViewState.classFullName;
215
+ break;
216
+ case ViewTypes.SheetViewDefinition:
217
+ viewFullName = SheetViewState.classFullName;
218
+ break;
219
+ default:
220
+ throw new Error("Unrecognized View Type");
221
+ }
222
+ // Check validity of default view
223
+ const viewId = await iModel.views.queryDefaultViewId();
224
+ const params = {};
225
+ params.from = viewFullName;
226
+ params.where = "ECInstanceId=" + viewId;
227
+ const viewProps = await IModelReadRpcInterface.getClient().queryElementProps(iModel.getRpcProps(), params);
228
+ if (viewProps.length > 0) {
229
+ return viewId;
230
+ }
231
+ // Return the first view we can find
232
+ const viewList = await iModel.views.getViewList({ from: viewFullName, wantPrivate: false });
233
+ if (viewList.length === 0) {
234
+ return "";
235
+ }
236
+ return viewList[0].id;
237
+ }
238
+ var ViewTypes;
239
+ (function (ViewTypes) {
240
+ ViewTypes[ViewTypes["SheetViewDefinition"] = 0] = "SheetViewDefinition";
241
+ ViewTypes[ViewTypes["ViewDefinition3d"] = 1] = "ViewDefinition3d";
242
+ ViewTypes[ViewTypes["DrawingViewDefinition"] = 2] = "DrawingViewDefinition";
243
+ })(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 = [...featureAppearanceLegacyMappings, extractString("modelId")];
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(displayStyleSubCategoryMappings, "subCategoryOvr", "subCategoryOverrides"),
344
+ extractArray(displayStyleSubCategoryLegacyMappings, "subCategoryOvr", "subCategoryOverrides"),
316
345
  extractObject(backgroundMapMappings, "backgroundMap"),
317
346
  extractArray(contextRealityModelsLegacyMappings, "contextRealityModels"),
318
347
  extractStringOrArray("excludedElements"),
319
- extractObject(mapImageryMapping, "mapImagery"),
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(solarShadowMappings, "solarShadows"),
434
- extractObject(lightsMappings, "lights"),
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 { LegacySavedView, LegacySavedView2d } from "../SavedViewTypes.js";
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;