@itwin/imodel-components-react 4.6.2 → 4.6.4

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/CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
1
  # Change Log - @itwin/imodel-components-react
2
2
 
3
- This log was last generated on Tue, 17 Oct 2023 19:16:23 GMT and should not be manually modified.
3
+ This log was last generated on Mon, 20 Nov 2023 19:07:50 GMT and should not be manually modified.
4
+
5
+ ## 4.6.4
6
+ Mon, 20 Nov 2023 19:07:50 GMT
7
+
8
+ ### Updates
9
+
10
+ - Remove additional `changeView` call on `ViewportComponent` mount.
11
+
12
+ ## 4.6.3
13
+ Wed, 25 Oct 2023 09:39:22 GMT
14
+
15
+ _Version update only_
4
16
 
5
17
  ## 4.6.2
6
18
  Tue, 17 Oct 2023 19:16:23 GMT
@@ -1 +1 @@
1
- {"version":3,"file":"ViewportComponent.d.ts","sourceRoot":"","sources":["../../../../src/imodel-components-react/viewport/ViewportComponent.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKtD,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,WAAW,EAEX,SAAS,EACV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQrD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,wBAAwB;IACxB,MAAM,EAAE,gBAAgB,CAAC;IACzB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,2CAA2C;IAC3C,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,wDAAwD;IACxD,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1C,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,OAAO,CAAC;IACjD,gBAAgB;IAChB,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,KAAK,CAAC,SAAS,CAAC;IAC/D,sCAAsC;IACtC,mBAAmB,CAAC,EAAE,WAAW,CAAC;IAClC,sCAAsC;IACtC,sBAAsB,CAAC,EAAE,OAAO,cAAc,CAAC;IAC/C,sCAAsC;IACtC,sBAAsB,CAAC,EAAE,cAAc,CAAC;CACzC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,eAiVrD"}
1
+ {"version":3,"file":"ViewportComponent.d.ts","sourceRoot":"","sources":["../../../../src/imodel-components-react/viewport/ViewportComponent.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKtD,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,WAAW,EAEX,SAAS,EACV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQrD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,wBAAwB;IACxB,MAAM,EAAE,gBAAgB,CAAC;IACzB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,2CAA2C;IAC3C,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,wDAAwD;IACxD,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1C,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,OAAO,CAAC;IACjD,gBAAgB;IAChB,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,KAAK,CAAC,SAAS,CAAC;IAC/D,sCAAsC;IACtC,mBAAmB,CAAC,EAAE,WAAW,CAAC;IAClC,sCAAsC;IACtC,sBAAsB,CAAC,EAAE,OAAO,cAAc,CAAC;IAC/C,sCAAsC;IACtC,sBAAsB,CAAC,EAAE,cAAc,CAAC;CACzC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,eA0UrD"}
@@ -195,15 +195,7 @@ function ViewportComponent(props) {
195
195
  };
196
196
  // eslint-disable-next-line react-hooks/exhaustive-deps
197
197
  }, []);
198
- const [initialViewState, setInitialViewState] = React.useState(() => {
199
- if (viewState) {
200
- if (typeof viewState === "function")
201
- return viewState().clone();
202
- else
203
- return viewState.clone();
204
- }
205
- return undefined;
206
- });
198
+ const [initialViewState, setInitialViewState] = React.useState(undefined);
207
199
  React.useEffect(() => {
208
200
  setInitialViewState(undefined);
209
201
  }, [viewDefinitionId, viewState]);
@@ -1 +1 @@
1
- {"version":3,"file":"ViewportComponent.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/viewport/ViewportComponent.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 *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Viewport\n */\n\nimport * as React from \"react\";\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport type { Point3d } from \"@itwin/core-geometry\";\nimport { Transform } from \"@itwin/core-geometry\";\nimport { NpcCenter } from \"@itwin/core-common\";\nimport type {\n IModelConnection,\n TentativePoint,\n ViewManager,\n Viewport,\n ViewState,\n} from \"@itwin/core-frontend\";\nimport {\n IModelApp,\n ScreenViewport,\n StandardView,\n ToolSettings,\n} from \"@itwin/core-frontend\";\n\nimport type { CommonProps } from \"@itwin/core-react\";\nimport type {\n CubeRotationChangeEventArgs,\n DrawingViewportChangeEventArgs,\n StandardRotationChangeEventArgs,\n} from \"./ViewportComponentEvents\";\nimport { ViewportComponentEvents } from \"./ViewportComponentEvents\";\n\n/** Type for a ViewState prop\n * @public\n */\nexport type ViewStateProp = ViewState | (() => ViewState);\n\n/**\n * Properties for [[ViewportComponent]] component.\n * @public\n */\nexport interface ViewportProps extends CommonProps {\n /** IModel to display */\n imodel: IModelConnection;\n /** Id of a default view definition to load as a starting point */\n viewDefinitionId?: Id64String;\n /** ViewState to use as a starting point */\n viewState?: ViewStateProp;\n /** Function to get a reference to the ScreenViewport */\n viewportRef?: (v: ScreenViewport) => void;\n /** controlId for this content component @internal */\n controlId?: string;\n /** @internal */\n onContextMenu?: (e: React.MouseEvent) => boolean;\n /** @internal */\n getViewOverlay?: (viewport: ScreenViewport) => React.ReactNode;\n /** @internal used only for testing */\n viewManagerOverride?: ViewManager;\n /** @internal used only for testing */\n screenViewportOverride?: typeof ScreenViewport;\n /** @internal used only for testing */\n tentativePointOverride?: TentativePoint;\n}\n\n/**\n * A viewport React component that creates a ScreenViewport.\n * @public\n */\nexport function ViewportComponent(props: ViewportProps) {\n const {\n viewState,\n imodel,\n viewDefinitionId,\n getViewOverlay,\n viewManagerOverride,\n tentativePointOverride,\n onContextMenu,\n style,\n className,\n screenViewportOverride,\n controlId,\n viewportRef,\n } = props;\n // istanbul ignore next\n const viewManagerRef = React.useRef(\n viewManagerOverride ?? IModelApp.viewManager\n );\n const tentativePointOverrideRef = React.useRef(tentativePointOverride);\n const screenViewportCreated = React.useRef(false);\n const viewportDiv = React.useRef<HTMLDivElement>(null);\n const screenViewportRef = React.useRef<ScreenViewport | null>(null);\n const isMounted = React.useRef(false);\n const viewClassFullName = React.useRef(\"\");\n const viewId = React.useRef(\"0\");\n\n // istanbul ignore next\n const handleViewChanged = (vp: Viewport) => {\n // istanbul ignore next\n if (!(vp.iModel.isOpen || vp.iModel.isBlank)) return;\n ViewportComponentEvents.setViewMatrix(vp);\n if (viewClassFullName.current !== vp.view.classFullName) {\n setTimeout(() => {\n ViewportComponentEvents.onViewClassFullNameChangedEvent.emit({\n viewport: vp,\n oldName: viewClassFullName.current,\n newName: vp.view.classFullName,\n });\n viewClassFullName.current = vp.view.classFullName;\n });\n }\n if (viewId.current !== vp.view.id) {\n setTimeout(() => {\n ViewportComponentEvents.onViewIdChangedEvent.emit({\n viewport: vp,\n oldId: viewId.current,\n newId: vp.view.id,\n });\n viewId.current = vp.view.id;\n });\n }\n };\n\n const handleStandardRotationChangeEvent = (\n args: StandardRotationChangeEventArgs\n ) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n currentScreenViewport.view.setRotationAboutPoint(\n StandardView.getStandardRotation(args.standardRotation)\n );\n currentScreenViewport.synchWithView();\n }\n };\n\n const handleDrawingViewportChangeEvent = (\n args: DrawingViewportChangeEventArgs\n ) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n currentScreenViewport.view.setOrigin(args.origin);\n currentScreenViewport.view.setRotation(args.rotation);\n currentScreenViewport.synchWithView({\n noSaveInUndo: args.complete !== true,\n });\n }\n };\n\n const targetPoint = React.useRef<Point3d | null>(null);\n\n const getRotatePoint = (vp: ScreenViewport): Point3d => {\n const lastTargetPoint = targetPoint.current;\n // istanbul ignore next\n const tentativePoint =\n tentativePointOverrideRef.current ?? IModelApp.tentativePoint;\n // istanbul ignore else\n if (tentativePoint.isActive) return tentativePoint.getPoint();\n\n // istanbul ignore else\n if (null !== lastTargetPoint) {\n const testPt = vp.worldToView(lastTargetPoint);\n const viewRect = vp.viewRect.clone();\n viewRect.scaleAboutCenter(0.25, 0.25);\n // istanbul ignore next hard to reach because of mocks\n if (viewRect.containsPoint(testPt)) return lastTargetPoint;\n targetPoint.current = null;\n }\n\n const visiblePoint = vp.pickNearestVisibleGeometry(\n vp.npcToWorld(NpcCenter),\n vp.pixelsFromInches(ToolSettings.viewToolPickRadiusInches)\n );\n targetPoint.current =\n undefined !== visiblePoint ? visiblePoint : vp.view.getTargetPoint();\n // istanbul ignore next\n return targetPoint.current ?? vp.view.getCenter();\n };\n\n const handleCubeRotationChangeEvent = (args: CubeRotationChangeEventArgs) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n // istanbul ignore else\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n const rotMatrix = args.rotMatrix;\n // istanbul ignore else\n if (currentScreenViewport.rotation !== rotMatrix) {\n const inverse = rotMatrix.transpose(); // rotation is from current nav cube state...\n const center = getRotatePoint(currentScreenViewport);\n const targetMatrix = inverse.multiplyMatrixMatrix(\n currentScreenViewport.view.getRotation()\n );\n const worldTransform = Transform.createFixedPointAndMatrix(\n center,\n targetMatrix\n );\n const frustum = currentScreenViewport.getWorldFrustum();\n frustum.multiply(worldTransform);\n currentScreenViewport.view.setupFromFrustum(frustum);\n currentScreenViewport.synchWithView({ noSaveInUndo: !args.complete });\n }\n }\n };\n\n const handleDisconnectFromViewManager = () => {\n const screenViewport = screenViewportRef.current;\n if (screenViewport) {\n const viewManager = IModelApp.viewManager;\n screenViewport.onViewChanged.removeListener(handleViewChanged);\n screenViewportRef.current = null;\n screenViewportCreated.current = false;\n ViewportComponentEvents.onDrawingViewportChangeEvent.removeListener(\n handleDrawingViewportChangeEvent\n );\n ViewportComponentEvents.onCubeRotationChangeEvent.removeListener(\n handleCubeRotationChangeEvent\n );\n ViewportComponentEvents.onStandardRotationChangeEvent.removeListener(\n handleStandardRotationChangeEvent\n );\n viewManager.dropViewport(screenViewport, true);\n }\n };\n\n // istanbul ignore next\n const handleWindowUnload = () => {\n const parentDiv = viewportDiv.current;\n if (parentDiv) {\n const parentWindow = parentDiv.ownerDocument.defaultView as Window;\n if (parentWindow !== window) {\n handleDisconnectFromViewManager();\n }\n }\n };\n\n const getScreenViewport = (\n parentDiv: HTMLDivElement,\n inViewState: ViewState\n ) => {\n // istanbul ignore next\n const screenViewportFactory = screenViewportOverride\n ? screenViewportOverride\n : ScreenViewport;\n const parentWindow = parentDiv.ownerDocument.defaultView as Window;\n parentWindow.addEventListener(\"unload\", handleWindowUnload, true); // listener clear after being called\n ViewportComponentEvents.initialize();\n ViewportComponentEvents.onDrawingViewportChangeEvent.addListener(\n handleDrawingViewportChangeEvent\n );\n ViewportComponentEvents.onCubeRotationChangeEvent.addListener(\n handleCubeRotationChangeEvent\n );\n ViewportComponentEvents.onStandardRotationChangeEvent.addListener(\n handleStandardRotationChangeEvent\n );\n const screenViewport = screenViewportFactory.create(parentDiv, inViewState);\n screenViewportCreated.current = true;\n viewClassFullName.current = screenViewport.view.classFullName;\n viewId.current = screenViewport.view.id;\n screenViewport.onViewChanged.addListener(handleViewChanged);\n return screenViewport;\n };\n\n React.useEffect(() => {\n isMounted.current = true;\n Logger.logInfo(\n \"ViewportComponent\",\n `mounting ViewportComponent for controlId=${controlId}`\n );\n\n return () => {\n isMounted.current = false;\n Logger.logInfo(\n \"ViewportComponent\",\n `un-mounting ViewportComponent for controlId=${controlId}`\n );\n handleDisconnectFromViewManager();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [initialViewState, setInitialViewState] = React.useState<\n ViewState | undefined\n >(() => {\n if (viewState) {\n if (typeof viewState === \"function\") return viewState().clone();\n else return viewState.clone();\n }\n return undefined;\n });\n\n React.useEffect(() => {\n setInitialViewState(undefined);\n }, [viewDefinitionId, viewState]);\n React.useEffect(() => {\n async function fetchInitialViewstate() {\n let currentViewState: ViewState | undefined;\n if (viewState) {\n if (typeof viewState === \"function\") currentViewState = viewState();\n else currentViewState = viewState;\n } else if (viewDefinitionId && imodel) {\n try {\n currentViewState = await imodel.views.load(viewDefinitionId);\n // istanbul ignore next\n if (!currentViewState) {\n Logger.logError(\"ViewportComponent\", `Viewstate failed to load`);\n }\n } catch (_e) {\n // istanbul ignore next\n Logger.logError(\"ViewportComponent\", `Viewstate failed to load`);\n }\n } else {\n Logger.logError(\n \"ViewportComponent\",\n `A Viewstate or a viewId and imodel must be provided`\n );\n }\n // istanbul ignore next\n if (\n isMounted.current &&\n (currentViewState?.iModel.isOpen || currentViewState?.iModel.isBlank)\n ) {\n setInitialViewState(currentViewState?.clone());\n }\n }\n if (undefined === initialViewState) void fetchInitialViewstate();\n }, [imodel, initialViewState, viewDefinitionId, viewState]);\n\n const [viewOverlay, setViewOverlay] = React.useState<React.ReactNode>(null);\n\n // This useEffect connects to ViewManger as soon as initialViewState is available once component is mounted.\n React.useEffect(() => {\n const parentDiv = viewportDiv.current;\n const viewManager = viewManagerRef.current;\n // istanbul ignore next\n if (\n parentDiv &&\n initialViewState &&\n (initialViewState?.iModel.isOpen || initialViewState?.iModel.isBlank)\n ) {\n if (!screenViewportCreated.current) {\n const screenViewport = getScreenViewport(parentDiv, initialViewState);\n screenViewportRef.current = screenViewport;\n\n if (viewportRef) viewportRef(screenViewport);\n\n Logger.logInfo(\n \"ViewportComponent\",\n `processing viewManager.addViewport for controlId=${controlId}`\n );\n viewManager.addViewport(screenViewport);\n\n // overlay component is set up once a ScreenViewport is available. The overlay component must handle any view changes itself.\n setViewOverlay(getViewOverlay ? getViewOverlay(screenViewport) : null);\n } else {\n // istanbul ignore next\n screenViewportRef.current?.changeView(initialViewState);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [controlId, initialViewState, viewportRef]);\n\n const handleContextMenu = React.useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n if (onContextMenu) onContextMenu(e);\n },\n [onContextMenu]\n );\n\n const parentDivStyle: React.CSSProperties = {\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n };\n\n const viewportDivStyle: React.CSSProperties = {\n ...style,\n height: \"100%\",\n width: \"100%\",\n };\n\n return (\n <div style={parentDivStyle} data-item-id={controlId}>\n <>\n <div\n ref={viewportDiv}\n data-testid=\"viewport-component\"\n className={className}\n style={viewportDivStyle}\n onContextMenu={handleContextMenu}\n />\n {viewOverlay}\n </>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"ViewportComponent.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/viewport/ViewportComponent.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 *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Viewport\n */\n\nimport * as React from \"react\";\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport type { Point3d } from \"@itwin/core-geometry\";\nimport { Transform } from \"@itwin/core-geometry\";\nimport { NpcCenter } from \"@itwin/core-common\";\nimport type {\n IModelConnection,\n TentativePoint,\n ViewManager,\n Viewport,\n ViewState,\n} from \"@itwin/core-frontend\";\nimport {\n IModelApp,\n ScreenViewport,\n StandardView,\n ToolSettings,\n} from \"@itwin/core-frontend\";\n\nimport type { CommonProps } from \"@itwin/core-react\";\nimport type {\n CubeRotationChangeEventArgs,\n DrawingViewportChangeEventArgs,\n StandardRotationChangeEventArgs,\n} from \"./ViewportComponentEvents\";\nimport { ViewportComponentEvents } from \"./ViewportComponentEvents\";\n\n/** Type for a ViewState prop\n * @public\n */\nexport type ViewStateProp = ViewState | (() => ViewState);\n\n/**\n * Properties for [[ViewportComponent]] component.\n * @public\n */\nexport interface ViewportProps extends CommonProps {\n /** IModel to display */\n imodel: IModelConnection;\n /** Id of a default view definition to load as a starting point */\n viewDefinitionId?: Id64String;\n /** ViewState to use as a starting point */\n viewState?: ViewStateProp;\n /** Function to get a reference to the ScreenViewport */\n viewportRef?: (v: ScreenViewport) => void;\n /** controlId for this content component @internal */\n controlId?: string;\n /** @internal */\n onContextMenu?: (e: React.MouseEvent) => boolean;\n /** @internal */\n getViewOverlay?: (viewport: ScreenViewport) => React.ReactNode;\n /** @internal used only for testing */\n viewManagerOverride?: ViewManager;\n /** @internal used only for testing */\n screenViewportOverride?: typeof ScreenViewport;\n /** @internal used only for testing */\n tentativePointOverride?: TentativePoint;\n}\n\n/**\n * A viewport React component that creates a ScreenViewport.\n * @public\n */\nexport function ViewportComponent(props: ViewportProps) {\n const {\n viewState,\n imodel,\n viewDefinitionId,\n getViewOverlay,\n viewManagerOverride,\n tentativePointOverride,\n onContextMenu,\n style,\n className,\n screenViewportOverride,\n controlId,\n viewportRef,\n } = props;\n // istanbul ignore next\n const viewManagerRef = React.useRef(\n viewManagerOverride ?? IModelApp.viewManager\n );\n const tentativePointOverrideRef = React.useRef(tentativePointOverride);\n const screenViewportCreated = React.useRef(false);\n const viewportDiv = React.useRef<HTMLDivElement>(null);\n const screenViewportRef = React.useRef<ScreenViewport | null>(null);\n const isMounted = React.useRef(false);\n const viewClassFullName = React.useRef(\"\");\n const viewId = React.useRef(\"0\");\n\n // istanbul ignore next\n const handleViewChanged = (vp: Viewport) => {\n // istanbul ignore next\n if (!(vp.iModel.isOpen || vp.iModel.isBlank)) return;\n ViewportComponentEvents.setViewMatrix(vp);\n if (viewClassFullName.current !== vp.view.classFullName) {\n setTimeout(() => {\n ViewportComponentEvents.onViewClassFullNameChangedEvent.emit({\n viewport: vp,\n oldName: viewClassFullName.current,\n newName: vp.view.classFullName,\n });\n viewClassFullName.current = vp.view.classFullName;\n });\n }\n if (viewId.current !== vp.view.id) {\n setTimeout(() => {\n ViewportComponentEvents.onViewIdChangedEvent.emit({\n viewport: vp,\n oldId: viewId.current,\n newId: vp.view.id,\n });\n viewId.current = vp.view.id;\n });\n }\n };\n\n const handleStandardRotationChangeEvent = (\n args: StandardRotationChangeEventArgs\n ) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n currentScreenViewport.view.setRotationAboutPoint(\n StandardView.getStandardRotation(args.standardRotation)\n );\n currentScreenViewport.synchWithView();\n }\n };\n\n const handleDrawingViewportChangeEvent = (\n args: DrawingViewportChangeEventArgs\n ) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n currentScreenViewport.view.setOrigin(args.origin);\n currentScreenViewport.view.setRotation(args.rotation);\n currentScreenViewport.synchWithView({\n noSaveInUndo: args.complete !== true,\n });\n }\n };\n\n const targetPoint = React.useRef<Point3d | null>(null);\n\n const getRotatePoint = (vp: ScreenViewport): Point3d => {\n const lastTargetPoint = targetPoint.current;\n // istanbul ignore next\n const tentativePoint =\n tentativePointOverrideRef.current ?? IModelApp.tentativePoint;\n // istanbul ignore else\n if (tentativePoint.isActive) return tentativePoint.getPoint();\n\n // istanbul ignore else\n if (null !== lastTargetPoint) {\n const testPt = vp.worldToView(lastTargetPoint);\n const viewRect = vp.viewRect.clone();\n viewRect.scaleAboutCenter(0.25, 0.25);\n // istanbul ignore next hard to reach because of mocks\n if (viewRect.containsPoint(testPt)) return lastTargetPoint;\n targetPoint.current = null;\n }\n\n const visiblePoint = vp.pickNearestVisibleGeometry(\n vp.npcToWorld(NpcCenter),\n vp.pixelsFromInches(ToolSettings.viewToolPickRadiusInches)\n );\n targetPoint.current =\n undefined !== visiblePoint ? visiblePoint : vp.view.getTargetPoint();\n // istanbul ignore next\n return targetPoint.current ?? vp.view.getCenter();\n };\n\n const handleCubeRotationChangeEvent = (args: CubeRotationChangeEventArgs) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n // istanbul ignore else\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n const rotMatrix = args.rotMatrix;\n // istanbul ignore else\n if (currentScreenViewport.rotation !== rotMatrix) {\n const inverse = rotMatrix.transpose(); // rotation is from current nav cube state...\n const center = getRotatePoint(currentScreenViewport);\n const targetMatrix = inverse.multiplyMatrixMatrix(\n currentScreenViewport.view.getRotation()\n );\n const worldTransform = Transform.createFixedPointAndMatrix(\n center,\n targetMatrix\n );\n const frustum = currentScreenViewport.getWorldFrustum();\n frustum.multiply(worldTransform);\n currentScreenViewport.view.setupFromFrustum(frustum);\n currentScreenViewport.synchWithView({ noSaveInUndo: !args.complete });\n }\n }\n };\n\n const handleDisconnectFromViewManager = () => {\n const screenViewport = screenViewportRef.current;\n if (screenViewport) {\n const viewManager = IModelApp.viewManager;\n screenViewport.onViewChanged.removeListener(handleViewChanged);\n screenViewportRef.current = null;\n screenViewportCreated.current = false;\n ViewportComponentEvents.onDrawingViewportChangeEvent.removeListener(\n handleDrawingViewportChangeEvent\n );\n ViewportComponentEvents.onCubeRotationChangeEvent.removeListener(\n handleCubeRotationChangeEvent\n );\n ViewportComponentEvents.onStandardRotationChangeEvent.removeListener(\n handleStandardRotationChangeEvent\n );\n viewManager.dropViewport(screenViewport, true);\n }\n };\n\n // istanbul ignore next\n const handleWindowUnload = () => {\n const parentDiv = viewportDiv.current;\n if (parentDiv) {\n const parentWindow = parentDiv.ownerDocument.defaultView as Window;\n if (parentWindow !== window) {\n handleDisconnectFromViewManager();\n }\n }\n };\n\n const getScreenViewport = (\n parentDiv: HTMLDivElement,\n inViewState: ViewState\n ) => {\n // istanbul ignore next\n const screenViewportFactory = screenViewportOverride\n ? screenViewportOverride\n : ScreenViewport;\n const parentWindow = parentDiv.ownerDocument.defaultView as Window;\n parentWindow.addEventListener(\"unload\", handleWindowUnload, true); // listener clear after being called\n ViewportComponentEvents.initialize();\n ViewportComponentEvents.onDrawingViewportChangeEvent.addListener(\n handleDrawingViewportChangeEvent\n );\n ViewportComponentEvents.onCubeRotationChangeEvent.addListener(\n handleCubeRotationChangeEvent\n );\n ViewportComponentEvents.onStandardRotationChangeEvent.addListener(\n handleStandardRotationChangeEvent\n );\n const screenViewport = screenViewportFactory.create(parentDiv, inViewState);\n screenViewportCreated.current = true;\n viewClassFullName.current = screenViewport.view.classFullName;\n viewId.current = screenViewport.view.id;\n screenViewport.onViewChanged.addListener(handleViewChanged);\n return screenViewport;\n };\n\n React.useEffect(() => {\n isMounted.current = true;\n Logger.logInfo(\n \"ViewportComponent\",\n `mounting ViewportComponent for controlId=${controlId}`\n );\n\n return () => {\n isMounted.current = false;\n Logger.logInfo(\n \"ViewportComponent\",\n `un-mounting ViewportComponent for controlId=${controlId}`\n );\n handleDisconnectFromViewManager();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [initialViewState, setInitialViewState] = React.useState<\n ViewState | undefined\n >(undefined);\n React.useEffect(() => {\n setInitialViewState(undefined);\n }, [viewDefinitionId, viewState]);\n React.useEffect(() => {\n async function fetchInitialViewstate() {\n let currentViewState: ViewState | undefined;\n if (viewState) {\n if (typeof viewState === \"function\") currentViewState = viewState();\n else currentViewState = viewState;\n } else if (viewDefinitionId && imodel) {\n try {\n currentViewState = await imodel.views.load(viewDefinitionId);\n // istanbul ignore next\n if (!currentViewState) {\n Logger.logError(\"ViewportComponent\", `Viewstate failed to load`);\n }\n } catch (_e) {\n // istanbul ignore next\n Logger.logError(\"ViewportComponent\", `Viewstate failed to load`);\n }\n } else {\n Logger.logError(\n \"ViewportComponent\",\n `A Viewstate or a viewId and imodel must be provided`\n );\n }\n // istanbul ignore next\n if (\n isMounted.current &&\n (currentViewState?.iModel.isOpen || currentViewState?.iModel.isBlank)\n ) {\n setInitialViewState(currentViewState?.clone());\n }\n }\n if (undefined === initialViewState) void fetchInitialViewstate();\n }, [imodel, initialViewState, viewDefinitionId, viewState]);\n\n const [viewOverlay, setViewOverlay] = React.useState<React.ReactNode>(null);\n\n // This useEffect connects to ViewManger as soon as initialViewState is available once component is mounted.\n React.useEffect(() => {\n const parentDiv = viewportDiv.current;\n const viewManager = viewManagerRef.current;\n // istanbul ignore next\n if (\n parentDiv &&\n initialViewState &&\n (initialViewState?.iModel.isOpen || initialViewState?.iModel.isBlank)\n ) {\n if (!screenViewportCreated.current) {\n const screenViewport = getScreenViewport(parentDiv, initialViewState);\n screenViewportRef.current = screenViewport;\n\n if (viewportRef) viewportRef(screenViewport);\n\n Logger.logInfo(\n \"ViewportComponent\",\n `processing viewManager.addViewport for controlId=${controlId}`\n );\n viewManager.addViewport(screenViewport);\n\n // overlay component is set up once a ScreenViewport is available. The overlay component must handle any view changes itself.\n setViewOverlay(getViewOverlay ? getViewOverlay(screenViewport) : null);\n } else {\n // istanbul ignore next\n screenViewportRef.current?.changeView(initialViewState);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [controlId, initialViewState, viewportRef]);\n\n const handleContextMenu = React.useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n if (onContextMenu) onContextMenu(e);\n },\n [onContextMenu]\n );\n\n const parentDivStyle: React.CSSProperties = {\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n };\n\n const viewportDivStyle: React.CSSProperties = {\n ...style,\n height: \"100%\",\n width: \"100%\",\n };\n\n return (\n <div style={parentDivStyle} data-item-id={controlId}>\n <>\n <div\n ref={viewportDiv}\n data-testid=\"viewport-component\"\n className={className}\n style={viewportDivStyle}\n onContextMenu={handleContextMenu}\n />\n {viewOverlay}\n </>\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewportComponent.d.ts","sourceRoot":"","sources":["../../../../src/imodel-components-react/viewport/ViewportComponent.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKtD,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,WAAW,EAEX,SAAS,EACV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQrD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,wBAAwB;IACxB,MAAM,EAAE,gBAAgB,CAAC;IACzB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,2CAA2C;IAC3C,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,wDAAwD;IACxD,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1C,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,OAAO,CAAC;IACjD,gBAAgB;IAChB,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,KAAK,CAAC,SAAS,CAAC;IAC/D,sCAAsC;IACtC,mBAAmB,CAAC,EAAE,WAAW,CAAC;IAClC,sCAAsC;IACtC,sBAAsB,CAAC,EAAE,OAAO,cAAc,CAAC;IAC/C,sCAAsC;IACtC,sBAAsB,CAAC,EAAE,cAAc,CAAC;CACzC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,eAiVrD"}
1
+ {"version":3,"file":"ViewportComponent.d.ts","sourceRoot":"","sources":["../../../../src/imodel-components-react/viewport/ViewportComponent.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKtD,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,WAAW,EAEX,SAAS,EACV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQrD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,wBAAwB;IACxB,MAAM,EAAE,gBAAgB,CAAC;IACzB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,2CAA2C;IAC3C,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,wDAAwD;IACxD,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1C,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,OAAO,CAAC;IACjD,gBAAgB;IAChB,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,KAAK,CAAC,SAAS,CAAC;IAC/D,sCAAsC;IACtC,mBAAmB,CAAC,EAAE,WAAW,CAAC;IAClC,sCAAsC;IACtC,sBAAsB,CAAC,EAAE,OAAO,cAAc,CAAC;IAC/C,sCAAsC;IACtC,sBAAsB,CAAC,EAAE,cAAc,CAAC;CACzC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,eA0UrD"}
@@ -169,15 +169,7 @@ export function ViewportComponent(props) {
169
169
  };
170
170
  // eslint-disable-next-line react-hooks/exhaustive-deps
171
171
  }, []);
172
- const [initialViewState, setInitialViewState] = React.useState(() => {
173
- if (viewState) {
174
- if (typeof viewState === "function")
175
- return viewState().clone();
176
- else
177
- return viewState.clone();
178
- }
179
- return undefined;
180
- });
172
+ const [initialViewState, setInitialViewState] = React.useState(undefined);
181
173
  React.useEffect(() => {
182
174
  setInitialViewState(undefined);
183
175
  }, [viewDefinitionId, viewState]);
@@ -1 +1 @@
1
- {"version":3,"file":"ViewportComponent.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/viewport/ViewportComponent.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 *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Viewport\n */\n\nimport * as React from \"react\";\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport type { Point3d } from \"@itwin/core-geometry\";\nimport { Transform } from \"@itwin/core-geometry\";\nimport { NpcCenter } from \"@itwin/core-common\";\nimport type {\n IModelConnection,\n TentativePoint,\n ViewManager,\n Viewport,\n ViewState,\n} from \"@itwin/core-frontend\";\nimport {\n IModelApp,\n ScreenViewport,\n StandardView,\n ToolSettings,\n} from \"@itwin/core-frontend\";\n\nimport type { CommonProps } from \"@itwin/core-react\";\nimport type {\n CubeRotationChangeEventArgs,\n DrawingViewportChangeEventArgs,\n StandardRotationChangeEventArgs,\n} from \"./ViewportComponentEvents\";\nimport { ViewportComponentEvents } from \"./ViewportComponentEvents\";\n\n/** Type for a ViewState prop\n * @public\n */\nexport type ViewStateProp = ViewState | (() => ViewState);\n\n/**\n * Properties for [[ViewportComponent]] component.\n * @public\n */\nexport interface ViewportProps extends CommonProps {\n /** IModel to display */\n imodel: IModelConnection;\n /** Id of a default view definition to load as a starting point */\n viewDefinitionId?: Id64String;\n /** ViewState to use as a starting point */\n viewState?: ViewStateProp;\n /** Function to get a reference to the ScreenViewport */\n viewportRef?: (v: ScreenViewport) => void;\n /** controlId for this content component @internal */\n controlId?: string;\n /** @internal */\n onContextMenu?: (e: React.MouseEvent) => boolean;\n /** @internal */\n getViewOverlay?: (viewport: ScreenViewport) => React.ReactNode;\n /** @internal used only for testing */\n viewManagerOverride?: ViewManager;\n /** @internal used only for testing */\n screenViewportOverride?: typeof ScreenViewport;\n /** @internal used only for testing */\n tentativePointOverride?: TentativePoint;\n}\n\n/**\n * A viewport React component that creates a ScreenViewport.\n * @public\n */\nexport function ViewportComponent(props: ViewportProps) {\n const {\n viewState,\n imodel,\n viewDefinitionId,\n getViewOverlay,\n viewManagerOverride,\n tentativePointOverride,\n onContextMenu,\n style,\n className,\n screenViewportOverride,\n controlId,\n viewportRef,\n } = props;\n // istanbul ignore next\n const viewManagerRef = React.useRef(\n viewManagerOverride ?? IModelApp.viewManager\n );\n const tentativePointOverrideRef = React.useRef(tentativePointOverride);\n const screenViewportCreated = React.useRef(false);\n const viewportDiv = React.useRef<HTMLDivElement>(null);\n const screenViewportRef = React.useRef<ScreenViewport | null>(null);\n const isMounted = React.useRef(false);\n const viewClassFullName = React.useRef(\"\");\n const viewId = React.useRef(\"0\");\n\n // istanbul ignore next\n const handleViewChanged = (vp: Viewport) => {\n // istanbul ignore next\n if (!(vp.iModel.isOpen || vp.iModel.isBlank)) return;\n ViewportComponentEvents.setViewMatrix(vp);\n if (viewClassFullName.current !== vp.view.classFullName) {\n setTimeout(() => {\n ViewportComponentEvents.onViewClassFullNameChangedEvent.emit({\n viewport: vp,\n oldName: viewClassFullName.current,\n newName: vp.view.classFullName,\n });\n viewClassFullName.current = vp.view.classFullName;\n });\n }\n if (viewId.current !== vp.view.id) {\n setTimeout(() => {\n ViewportComponentEvents.onViewIdChangedEvent.emit({\n viewport: vp,\n oldId: viewId.current,\n newId: vp.view.id,\n });\n viewId.current = vp.view.id;\n });\n }\n };\n\n const handleStandardRotationChangeEvent = (\n args: StandardRotationChangeEventArgs\n ) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n currentScreenViewport.view.setRotationAboutPoint(\n StandardView.getStandardRotation(args.standardRotation)\n );\n currentScreenViewport.synchWithView();\n }\n };\n\n const handleDrawingViewportChangeEvent = (\n args: DrawingViewportChangeEventArgs\n ) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n currentScreenViewport.view.setOrigin(args.origin);\n currentScreenViewport.view.setRotation(args.rotation);\n currentScreenViewport.synchWithView({\n noSaveInUndo: args.complete !== true,\n });\n }\n };\n\n const targetPoint = React.useRef<Point3d | null>(null);\n\n const getRotatePoint = (vp: ScreenViewport): Point3d => {\n const lastTargetPoint = targetPoint.current;\n // istanbul ignore next\n const tentativePoint =\n tentativePointOverrideRef.current ?? IModelApp.tentativePoint;\n // istanbul ignore else\n if (tentativePoint.isActive) return tentativePoint.getPoint();\n\n // istanbul ignore else\n if (null !== lastTargetPoint) {\n const testPt = vp.worldToView(lastTargetPoint);\n const viewRect = vp.viewRect.clone();\n viewRect.scaleAboutCenter(0.25, 0.25);\n // istanbul ignore next hard to reach because of mocks\n if (viewRect.containsPoint(testPt)) return lastTargetPoint;\n targetPoint.current = null;\n }\n\n const visiblePoint = vp.pickNearestVisibleGeometry(\n vp.npcToWorld(NpcCenter),\n vp.pixelsFromInches(ToolSettings.viewToolPickRadiusInches)\n );\n targetPoint.current =\n undefined !== visiblePoint ? visiblePoint : vp.view.getTargetPoint();\n // istanbul ignore next\n return targetPoint.current ?? vp.view.getCenter();\n };\n\n const handleCubeRotationChangeEvent = (args: CubeRotationChangeEventArgs) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n // istanbul ignore else\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n const rotMatrix = args.rotMatrix;\n // istanbul ignore else\n if (currentScreenViewport.rotation !== rotMatrix) {\n const inverse = rotMatrix.transpose(); // rotation is from current nav cube state...\n const center = getRotatePoint(currentScreenViewport);\n const targetMatrix = inverse.multiplyMatrixMatrix(\n currentScreenViewport.view.getRotation()\n );\n const worldTransform = Transform.createFixedPointAndMatrix(\n center,\n targetMatrix\n );\n const frustum = currentScreenViewport.getWorldFrustum();\n frustum.multiply(worldTransform);\n currentScreenViewport.view.setupFromFrustum(frustum);\n currentScreenViewport.synchWithView({ noSaveInUndo: !args.complete });\n }\n }\n };\n\n const handleDisconnectFromViewManager = () => {\n const screenViewport = screenViewportRef.current;\n if (screenViewport) {\n const viewManager = IModelApp.viewManager;\n screenViewport.onViewChanged.removeListener(handleViewChanged);\n screenViewportRef.current = null;\n screenViewportCreated.current = false;\n ViewportComponentEvents.onDrawingViewportChangeEvent.removeListener(\n handleDrawingViewportChangeEvent\n );\n ViewportComponentEvents.onCubeRotationChangeEvent.removeListener(\n handleCubeRotationChangeEvent\n );\n ViewportComponentEvents.onStandardRotationChangeEvent.removeListener(\n handleStandardRotationChangeEvent\n );\n viewManager.dropViewport(screenViewport, true);\n }\n };\n\n // istanbul ignore next\n const handleWindowUnload = () => {\n const parentDiv = viewportDiv.current;\n if (parentDiv) {\n const parentWindow = parentDiv.ownerDocument.defaultView as Window;\n if (parentWindow !== window) {\n handleDisconnectFromViewManager();\n }\n }\n };\n\n const getScreenViewport = (\n parentDiv: HTMLDivElement,\n inViewState: ViewState\n ) => {\n // istanbul ignore next\n const screenViewportFactory = screenViewportOverride\n ? screenViewportOverride\n : ScreenViewport;\n const parentWindow = parentDiv.ownerDocument.defaultView as Window;\n parentWindow.addEventListener(\"unload\", handleWindowUnload, true); // listener clear after being called\n ViewportComponentEvents.initialize();\n ViewportComponentEvents.onDrawingViewportChangeEvent.addListener(\n handleDrawingViewportChangeEvent\n );\n ViewportComponentEvents.onCubeRotationChangeEvent.addListener(\n handleCubeRotationChangeEvent\n );\n ViewportComponentEvents.onStandardRotationChangeEvent.addListener(\n handleStandardRotationChangeEvent\n );\n const screenViewport = screenViewportFactory.create(parentDiv, inViewState);\n screenViewportCreated.current = true;\n viewClassFullName.current = screenViewport.view.classFullName;\n viewId.current = screenViewport.view.id;\n screenViewport.onViewChanged.addListener(handleViewChanged);\n return screenViewport;\n };\n\n React.useEffect(() => {\n isMounted.current = true;\n Logger.logInfo(\n \"ViewportComponent\",\n `mounting ViewportComponent for controlId=${controlId}`\n );\n\n return () => {\n isMounted.current = false;\n Logger.logInfo(\n \"ViewportComponent\",\n `un-mounting ViewportComponent for controlId=${controlId}`\n );\n handleDisconnectFromViewManager();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [initialViewState, setInitialViewState] = React.useState<\n ViewState | undefined\n >(() => {\n if (viewState) {\n if (typeof viewState === \"function\") return viewState().clone();\n else return viewState.clone();\n }\n return undefined;\n });\n\n React.useEffect(() => {\n setInitialViewState(undefined);\n }, [viewDefinitionId, viewState]);\n React.useEffect(() => {\n async function fetchInitialViewstate() {\n let currentViewState: ViewState | undefined;\n if (viewState) {\n if (typeof viewState === \"function\") currentViewState = viewState();\n else currentViewState = viewState;\n } else if (viewDefinitionId && imodel) {\n try {\n currentViewState = await imodel.views.load(viewDefinitionId);\n // istanbul ignore next\n if (!currentViewState) {\n Logger.logError(\"ViewportComponent\", `Viewstate failed to load`);\n }\n } catch (_e) {\n // istanbul ignore next\n Logger.logError(\"ViewportComponent\", `Viewstate failed to load`);\n }\n } else {\n Logger.logError(\n \"ViewportComponent\",\n `A Viewstate or a viewId and imodel must be provided`\n );\n }\n // istanbul ignore next\n if (\n isMounted.current &&\n (currentViewState?.iModel.isOpen || currentViewState?.iModel.isBlank)\n ) {\n setInitialViewState(currentViewState?.clone());\n }\n }\n if (undefined === initialViewState) void fetchInitialViewstate();\n }, [imodel, initialViewState, viewDefinitionId, viewState]);\n\n const [viewOverlay, setViewOverlay] = React.useState<React.ReactNode>(null);\n\n // This useEffect connects to ViewManger as soon as initialViewState is available once component is mounted.\n React.useEffect(() => {\n const parentDiv = viewportDiv.current;\n const viewManager = viewManagerRef.current;\n // istanbul ignore next\n if (\n parentDiv &&\n initialViewState &&\n (initialViewState?.iModel.isOpen || initialViewState?.iModel.isBlank)\n ) {\n if (!screenViewportCreated.current) {\n const screenViewport = getScreenViewport(parentDiv, initialViewState);\n screenViewportRef.current = screenViewport;\n\n if (viewportRef) viewportRef(screenViewport);\n\n Logger.logInfo(\n \"ViewportComponent\",\n `processing viewManager.addViewport for controlId=${controlId}`\n );\n viewManager.addViewport(screenViewport);\n\n // overlay component is set up once a ScreenViewport is available. The overlay component must handle any view changes itself.\n setViewOverlay(getViewOverlay ? getViewOverlay(screenViewport) : null);\n } else {\n // istanbul ignore next\n screenViewportRef.current?.changeView(initialViewState);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [controlId, initialViewState, viewportRef]);\n\n const handleContextMenu = React.useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n if (onContextMenu) onContextMenu(e);\n },\n [onContextMenu]\n );\n\n const parentDivStyle: React.CSSProperties = {\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n };\n\n const viewportDivStyle: React.CSSProperties = {\n ...style,\n height: \"100%\",\n width: \"100%\",\n };\n\n return (\n <div style={parentDivStyle} data-item-id={controlId}>\n <>\n <div\n ref={viewportDiv}\n data-testid=\"viewport-component\"\n className={className}\n style={viewportDivStyle}\n onContextMenu={handleContextMenu}\n />\n {viewOverlay}\n </>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"ViewportComponent.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/viewport/ViewportComponent.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAQ/C,OAAO,EACL,SAAS,EACT,cAAc,EACd,YAAY,EACZ,YAAY,GACb,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAkCpE;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAoB;IACpD,MAAM,EACJ,SAAS,EACT,MAAM,EACN,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,EACb,KAAK,EACL,SAAS,EACT,sBAAsB,EACtB,SAAS,EACT,WAAW,GACZ,GAAG,KAAK,CAAC;IACV,uBAAuB;IACvB,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CACjC,mBAAmB,IAAI,SAAS,CAAC,WAAW,CAC7C,CAAC;IACF,MAAM,yBAAyB,GAAG,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACvE,MAAM,qBAAqB,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IACvD,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAAwB,IAAI,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEjC,uBAAuB;IACvB,MAAM,iBAAiB,GAAG,CAAC,EAAY,EAAE,EAAE;QACzC,uBAAuB;QACvB,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;YAAE,OAAO;QACrD,uBAAuB,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,iBAAiB,CAAC,OAAO,KAAK,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE;YACvD,UAAU,CAAC,GAAG,EAAE;gBACd,uBAAuB,CAAC,+BAA+B,CAAC,IAAI,CAAC;oBAC3D,QAAQ,EAAE,EAAE;oBACZ,OAAO,EAAE,iBAAiB,CAAC,OAAO;oBAClC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa;iBAC/B,CAAC,CAAC;gBACH,iBAAiB,CAAC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC;YACpD,CAAC,CAAC,CAAC;SACJ;QACD,IAAI,MAAM,CAAC,OAAO,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE;YACjC,UAAU,CAAC,GAAG,EAAE;gBACd,uBAAuB,CAAC,oBAAoB,CAAC,IAAI,CAAC;oBAChD,QAAQ,EAAE,EAAE;oBACZ,KAAK,EAAE,MAAM,CAAC,OAAO;oBACrB,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;iBAClB,CAAC,CAAC;gBACH,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,CAAC,CAAC,CAAC;SACJ;IACH,CAAC,CAAC;IAEF,MAAM,iCAAiC,GAAG,CACxC,IAAqC,EACrC,EAAE;QACF,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC;QAC3C,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,OAAO,CAAC;QACxD,IACE,qBAAqB;YACrB,WAAW,CAAC,YAAY,KAAK,qBAAqB,EAClD;YACA,qBAAqB,CAAC,IAAI,CAAC,qBAAqB,CAC9C,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CACxD,CAAC;YACF,qBAAqB,CAAC,aAAa,EAAE,CAAC;SACvC;IACH,CAAC,CAAC;IAEF,MAAM,gCAAgC,GAAG,CACvC,IAAoC,EACpC,EAAE;QACF,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC;QAC3C,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,OAAO,CAAC;QACxD,IACE,qBAAqB;YACrB,WAAW,CAAC,YAAY,KAAK,qBAAqB,EAClD;YACA,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClD,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtD,qBAAqB,CAAC,aAAa,CAAC;gBAClC,YAAY,EAAE,IAAI,CAAC,QAAQ,KAAK,IAAI;aACrC,CAAC,CAAC;SACJ;IACH,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IAEvD,MAAM,cAAc,GAAG,CAAC,EAAkB,EAAW,EAAE;QACrD,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC;QAC5C,uBAAuB;QACvB,MAAM,cAAc,GAClB,yBAAyB,CAAC,OAAO,IAAI,SAAS,CAAC,cAAc,CAAC;QAChE,uBAAuB;QACvB,IAAI,cAAc,CAAC,QAAQ;YAAE,OAAO,cAAc,CAAC,QAAQ,EAAE,CAAC;QAE9D,uBAAuB;QACvB,IAAI,IAAI,KAAK,eAAe,EAAE;YAC5B,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACrC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACtC,sDAAsD;YACtD,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;gBAAE,OAAO,eAAe,CAAC;YAC3D,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;SAC5B;QAED,MAAM,YAAY,GAAG,EAAE,CAAC,0BAA0B,CAChD,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EACxB,EAAE,CAAC,gBAAgB,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAC3D,CAAC;QACF,WAAW,CAAC,OAAO;YACjB,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QACvE,uBAAuB;QACvB,OAAO,WAAW,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACpD,CAAC,CAAC;IAEF,MAAM,6BAA6B,GAAG,CAAC,IAAiC,EAAE,EAAE;QAC1E,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC;QAC3C,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,OAAO,CAAC;QACxD,uBAAuB;QACvB,IACE,qBAAqB;YACrB,WAAW,CAAC,YAAY,KAAK,qBAAqB,EAClD;YACA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,uBAAuB;YACvB,IAAI,qBAAqB,CAAC,QAAQ,KAAK,SAAS,EAAE;gBAChD,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,6CAA6C;gBACpF,MAAM,MAAM,GAAG,cAAc,CAAC,qBAAqB,CAAC,CAAC;gBACrD,MAAM,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAC/C,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,CACzC,CAAC;gBACF,MAAM,cAAc,GAAG,SAAS,CAAC,yBAAyB,CACxD,MAAM,EACN,YAAY,CACb,CAAC;gBACF,MAAM,OAAO,GAAG,qBAAqB,CAAC,eAAe,EAAE,CAAC;gBACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;gBACjC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACrD,qBAAqB,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;aACvE;SACF;IACH,CAAC,CAAC;IAEF,MAAM,+BAA+B,GAAG,GAAG,EAAE;QAC3C,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC;QACjD,IAAI,cAAc,EAAE;YAClB,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;YAC1C,cAAc,CAAC,aAAa,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAC/D,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC;YACjC,qBAAqB,CAAC,OAAO,GAAG,KAAK,CAAC;YACtC,uBAAuB,CAAC,4BAA4B,CAAC,cAAc,CACjE,gCAAgC,CACjC,CAAC;YACF,uBAAuB,CAAC,yBAAyB,CAAC,cAAc,CAC9D,6BAA6B,CAC9B,CAAC;YACF,uBAAuB,CAAC,6BAA6B,CAAC,cAAc,CAClE,iCAAiC,CAClC,CAAC;YACF,WAAW,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;SAChD;IACH,CAAC,CAAC;IAEF,uBAAuB;IACvB,MAAM,kBAAkB,GAAG,GAAG,EAAE;QAC9B,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC;QACtC,IAAI,SAAS,EAAE;YACb,MAAM,YAAY,GAAG,SAAS,CAAC,aAAa,CAAC,WAAqB,CAAC;YACnE,IAAI,YAAY,KAAK,MAAM,EAAE;gBAC3B,+BAA+B,EAAE,CAAC;aACnC;SACF;IACH,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CACxB,SAAyB,EACzB,WAAsB,EACtB,EAAE;QACF,uBAAuB;QACvB,MAAM,qBAAqB,GAAG,sBAAsB;YAClD,CAAC,CAAC,sBAAsB;YACxB,CAAC,CAAC,cAAc,CAAC;QACnB,MAAM,YAAY,GAAG,SAAS,CAAC,aAAa,CAAC,WAAqB,CAAC;QACnE,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,oCAAoC;QACvG,uBAAuB,CAAC,UAAU,EAAE,CAAC;QACrC,uBAAuB,CAAC,4BAA4B,CAAC,WAAW,CAC9D,gCAAgC,CACjC,CAAC;QACF,uBAAuB,CAAC,yBAAyB,CAAC,WAAW,CAC3D,6BAA6B,CAC9B,CAAC;QACF,uBAAuB,CAAC,6BAA6B,CAAC,WAAW,CAC/D,iCAAiC,CAClC,CAAC;QACF,MAAM,cAAc,GAAG,qBAAqB,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC5E,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC;QACrC,iBAAiB,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC;QAC9D,MAAM,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,cAAc,CAAC,aAAa,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAC5D,OAAO,cAAc,CAAC;IACxB,CAAC,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,OAAO,CACZ,mBAAmB,EACnB,4CAA4C,SAAS,EAAE,CACxD,CAAC;QAEF,OAAO,GAAG,EAAE;YACV,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;YAC1B,MAAM,CAAC,OAAO,CACZ,mBAAmB,EACnB,+CAA+C,SAAS,EAAE,CAC3D,CAAC;YACF,+BAA+B,EAAE,CAAC;QACpC,CAAC,CAAC;QACF,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAE5D,SAAS,CAAC,CAAC;IACb,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC;IAClC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,KAAK,UAAU,qBAAqB;YAClC,IAAI,gBAAuC,CAAC;YAC5C,IAAI,SAAS,EAAE;gBACb,IAAI,OAAO,SAAS,KAAK,UAAU;oBAAE,gBAAgB,GAAG,SAAS,EAAE,CAAC;;oBAC/D,gBAAgB,GAAG,SAAS,CAAC;aACnC;iBAAM,IAAI,gBAAgB,IAAI,MAAM,EAAE;gBACrC,IAAI;oBACF,gBAAgB,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBAC7D,uBAAuB;oBACvB,IAAI,CAAC,gBAAgB,EAAE;wBACrB,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,0BAA0B,CAAC,CAAC;qBAClE;iBACF;gBAAC,OAAO,EAAE,EAAE;oBACX,uBAAuB;oBACvB,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,0BAA0B,CAAC,CAAC;iBAClE;aACF;iBAAM;gBACL,MAAM,CAAC,QAAQ,CACb,mBAAmB,EACnB,qDAAqD,CACtD,CAAC;aACH;YACD,uBAAuB;YACvB,IACE,SAAS,CAAC,OAAO;gBACjB,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,IAAI,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,EACrE;gBACA,mBAAmB,CAAC,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;aAChD;QACH,CAAC;QACD,IAAI,SAAS,KAAK,gBAAgB;YAAE,KAAK,qBAAqB,EAAE,CAAC;IACnE,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC;IAE5D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAkB,IAAI,CAAC,CAAC;IAE5E,4GAA4G;IAC5G,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC;QACtC,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC;QAC3C,uBAAuB;QACvB,IACE,SAAS;YACT,gBAAgB;YAChB,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,IAAI,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,EACrE;YACA,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE;gBAClC,MAAM,cAAc,GAAG,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;gBACtE,iBAAiB,CAAC,OAAO,GAAG,cAAc,CAAC;gBAE3C,IAAI,WAAW;oBAAE,WAAW,CAAC,cAAc,CAAC,CAAC;gBAE7C,MAAM,CAAC,OAAO,CACZ,mBAAmB,EACnB,oDAAoD,SAAS,EAAE,CAChE,CAAC;gBACF,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;gBAExC,6HAA6H;gBAC7H,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACxE;iBAAM;gBACL,uBAAuB;gBACvB,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC;aACzD;SACF;QACD,uDAAuD;IACzD,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAC;IAE/C,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CACzC,CAAC,CAAmB,EAAE,EAAE;QACtB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,aAAa;YAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,EACD,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF,MAAM,cAAc,GAAwB;QAC1C,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,UAAU;KACrB,CAAC;IAEF,MAAM,gBAAgB,GAAwB;QAC5C,GAAG,KAAK;QACR,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,MAAM;KACd,CAAC;IAEF,OAAO,CACL,6BAAK,KAAK,EAAE,cAAc,kBAAgB,SAAS;QACjD;YACE,6BACE,GAAG,EAAE,WAAW,iBACJ,oBAAoB,EAChC,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,gBAAgB,EACvB,aAAa,EAAE,iBAAiB,GAChC;YACD,WAAW,CACX,CACC,CACP,CAAC;AACJ,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 *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Viewport\n */\n\nimport * as React from \"react\";\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport type { Point3d } from \"@itwin/core-geometry\";\nimport { Transform } from \"@itwin/core-geometry\";\nimport { NpcCenter } from \"@itwin/core-common\";\nimport type {\n IModelConnection,\n TentativePoint,\n ViewManager,\n Viewport,\n ViewState,\n} from \"@itwin/core-frontend\";\nimport {\n IModelApp,\n ScreenViewport,\n StandardView,\n ToolSettings,\n} from \"@itwin/core-frontend\";\n\nimport type { CommonProps } from \"@itwin/core-react\";\nimport type {\n CubeRotationChangeEventArgs,\n DrawingViewportChangeEventArgs,\n StandardRotationChangeEventArgs,\n} from \"./ViewportComponentEvents\";\nimport { ViewportComponentEvents } from \"./ViewportComponentEvents\";\n\n/** Type for a ViewState prop\n * @public\n */\nexport type ViewStateProp = ViewState | (() => ViewState);\n\n/**\n * Properties for [[ViewportComponent]] component.\n * @public\n */\nexport interface ViewportProps extends CommonProps {\n /** IModel to display */\n imodel: IModelConnection;\n /** Id of a default view definition to load as a starting point */\n viewDefinitionId?: Id64String;\n /** ViewState to use as a starting point */\n viewState?: ViewStateProp;\n /** Function to get a reference to the ScreenViewport */\n viewportRef?: (v: ScreenViewport) => void;\n /** controlId for this content component @internal */\n controlId?: string;\n /** @internal */\n onContextMenu?: (e: React.MouseEvent) => boolean;\n /** @internal */\n getViewOverlay?: (viewport: ScreenViewport) => React.ReactNode;\n /** @internal used only for testing */\n viewManagerOverride?: ViewManager;\n /** @internal used only for testing */\n screenViewportOverride?: typeof ScreenViewport;\n /** @internal used only for testing */\n tentativePointOverride?: TentativePoint;\n}\n\n/**\n * A viewport React component that creates a ScreenViewport.\n * @public\n */\nexport function ViewportComponent(props: ViewportProps) {\n const {\n viewState,\n imodel,\n viewDefinitionId,\n getViewOverlay,\n viewManagerOverride,\n tentativePointOverride,\n onContextMenu,\n style,\n className,\n screenViewportOverride,\n controlId,\n viewportRef,\n } = props;\n // istanbul ignore next\n const viewManagerRef = React.useRef(\n viewManagerOverride ?? IModelApp.viewManager\n );\n const tentativePointOverrideRef = React.useRef(tentativePointOverride);\n const screenViewportCreated = React.useRef(false);\n const viewportDiv = React.useRef<HTMLDivElement>(null);\n const screenViewportRef = React.useRef<ScreenViewport | null>(null);\n const isMounted = React.useRef(false);\n const viewClassFullName = React.useRef(\"\");\n const viewId = React.useRef(\"0\");\n\n // istanbul ignore next\n const handleViewChanged = (vp: Viewport) => {\n // istanbul ignore next\n if (!(vp.iModel.isOpen || vp.iModel.isBlank)) return;\n ViewportComponentEvents.setViewMatrix(vp);\n if (viewClassFullName.current !== vp.view.classFullName) {\n setTimeout(() => {\n ViewportComponentEvents.onViewClassFullNameChangedEvent.emit({\n viewport: vp,\n oldName: viewClassFullName.current,\n newName: vp.view.classFullName,\n });\n viewClassFullName.current = vp.view.classFullName;\n });\n }\n if (viewId.current !== vp.view.id) {\n setTimeout(() => {\n ViewportComponentEvents.onViewIdChangedEvent.emit({\n viewport: vp,\n oldId: viewId.current,\n newId: vp.view.id,\n });\n viewId.current = vp.view.id;\n });\n }\n };\n\n const handleStandardRotationChangeEvent = (\n args: StandardRotationChangeEventArgs\n ) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n currentScreenViewport.view.setRotationAboutPoint(\n StandardView.getStandardRotation(args.standardRotation)\n );\n currentScreenViewport.synchWithView();\n }\n };\n\n const handleDrawingViewportChangeEvent = (\n args: DrawingViewportChangeEventArgs\n ) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n currentScreenViewport.view.setOrigin(args.origin);\n currentScreenViewport.view.setRotation(args.rotation);\n currentScreenViewport.synchWithView({\n noSaveInUndo: args.complete !== true,\n });\n }\n };\n\n const targetPoint = React.useRef<Point3d | null>(null);\n\n const getRotatePoint = (vp: ScreenViewport): Point3d => {\n const lastTargetPoint = targetPoint.current;\n // istanbul ignore next\n const tentativePoint =\n tentativePointOverrideRef.current ?? IModelApp.tentativePoint;\n // istanbul ignore else\n if (tentativePoint.isActive) return tentativePoint.getPoint();\n\n // istanbul ignore else\n if (null !== lastTargetPoint) {\n const testPt = vp.worldToView(lastTargetPoint);\n const viewRect = vp.viewRect.clone();\n viewRect.scaleAboutCenter(0.25, 0.25);\n // istanbul ignore next hard to reach because of mocks\n if (viewRect.containsPoint(testPt)) return lastTargetPoint;\n targetPoint.current = null;\n }\n\n const visiblePoint = vp.pickNearestVisibleGeometry(\n vp.npcToWorld(NpcCenter),\n vp.pixelsFromInches(ToolSettings.viewToolPickRadiusInches)\n );\n targetPoint.current =\n undefined !== visiblePoint ? visiblePoint : vp.view.getTargetPoint();\n // istanbul ignore next\n return targetPoint.current ?? vp.view.getCenter();\n };\n\n const handleCubeRotationChangeEvent = (args: CubeRotationChangeEventArgs) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n // istanbul ignore else\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n const rotMatrix = args.rotMatrix;\n // istanbul ignore else\n if (currentScreenViewport.rotation !== rotMatrix) {\n const inverse = rotMatrix.transpose(); // rotation is from current nav cube state...\n const center = getRotatePoint(currentScreenViewport);\n const targetMatrix = inverse.multiplyMatrixMatrix(\n currentScreenViewport.view.getRotation()\n );\n const worldTransform = Transform.createFixedPointAndMatrix(\n center,\n targetMatrix\n );\n const frustum = currentScreenViewport.getWorldFrustum();\n frustum.multiply(worldTransform);\n currentScreenViewport.view.setupFromFrustum(frustum);\n currentScreenViewport.synchWithView({ noSaveInUndo: !args.complete });\n }\n }\n };\n\n const handleDisconnectFromViewManager = () => {\n const screenViewport = screenViewportRef.current;\n if (screenViewport) {\n const viewManager = IModelApp.viewManager;\n screenViewport.onViewChanged.removeListener(handleViewChanged);\n screenViewportRef.current = null;\n screenViewportCreated.current = false;\n ViewportComponentEvents.onDrawingViewportChangeEvent.removeListener(\n handleDrawingViewportChangeEvent\n );\n ViewportComponentEvents.onCubeRotationChangeEvent.removeListener(\n handleCubeRotationChangeEvent\n );\n ViewportComponentEvents.onStandardRotationChangeEvent.removeListener(\n handleStandardRotationChangeEvent\n );\n viewManager.dropViewport(screenViewport, true);\n }\n };\n\n // istanbul ignore next\n const handleWindowUnload = () => {\n const parentDiv = viewportDiv.current;\n if (parentDiv) {\n const parentWindow = parentDiv.ownerDocument.defaultView as Window;\n if (parentWindow !== window) {\n handleDisconnectFromViewManager();\n }\n }\n };\n\n const getScreenViewport = (\n parentDiv: HTMLDivElement,\n inViewState: ViewState\n ) => {\n // istanbul ignore next\n const screenViewportFactory = screenViewportOverride\n ? screenViewportOverride\n : ScreenViewport;\n const parentWindow = parentDiv.ownerDocument.defaultView as Window;\n parentWindow.addEventListener(\"unload\", handleWindowUnload, true); // listener clear after being called\n ViewportComponentEvents.initialize();\n ViewportComponentEvents.onDrawingViewportChangeEvent.addListener(\n handleDrawingViewportChangeEvent\n );\n ViewportComponentEvents.onCubeRotationChangeEvent.addListener(\n handleCubeRotationChangeEvent\n );\n ViewportComponentEvents.onStandardRotationChangeEvent.addListener(\n handleStandardRotationChangeEvent\n );\n const screenViewport = screenViewportFactory.create(parentDiv, inViewState);\n screenViewportCreated.current = true;\n viewClassFullName.current = screenViewport.view.classFullName;\n viewId.current = screenViewport.view.id;\n screenViewport.onViewChanged.addListener(handleViewChanged);\n return screenViewport;\n };\n\n React.useEffect(() => {\n isMounted.current = true;\n Logger.logInfo(\n \"ViewportComponent\",\n `mounting ViewportComponent for controlId=${controlId}`\n );\n\n return () => {\n isMounted.current = false;\n Logger.logInfo(\n \"ViewportComponent\",\n `un-mounting ViewportComponent for controlId=${controlId}`\n );\n handleDisconnectFromViewManager();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [initialViewState, setInitialViewState] = React.useState<\n ViewState | undefined\n >(undefined);\n React.useEffect(() => {\n setInitialViewState(undefined);\n }, [viewDefinitionId, viewState]);\n React.useEffect(() => {\n async function fetchInitialViewstate() {\n let currentViewState: ViewState | undefined;\n if (viewState) {\n if (typeof viewState === \"function\") currentViewState = viewState();\n else currentViewState = viewState;\n } else if (viewDefinitionId && imodel) {\n try {\n currentViewState = await imodel.views.load(viewDefinitionId);\n // istanbul ignore next\n if (!currentViewState) {\n Logger.logError(\"ViewportComponent\", `Viewstate failed to load`);\n }\n } catch (_e) {\n // istanbul ignore next\n Logger.logError(\"ViewportComponent\", `Viewstate failed to load`);\n }\n } else {\n Logger.logError(\n \"ViewportComponent\",\n `A Viewstate or a viewId and imodel must be provided`\n );\n }\n // istanbul ignore next\n if (\n isMounted.current &&\n (currentViewState?.iModel.isOpen || currentViewState?.iModel.isBlank)\n ) {\n setInitialViewState(currentViewState?.clone());\n }\n }\n if (undefined === initialViewState) void fetchInitialViewstate();\n }, [imodel, initialViewState, viewDefinitionId, viewState]);\n\n const [viewOverlay, setViewOverlay] = React.useState<React.ReactNode>(null);\n\n // This useEffect connects to ViewManger as soon as initialViewState is available once component is mounted.\n React.useEffect(() => {\n const parentDiv = viewportDiv.current;\n const viewManager = viewManagerRef.current;\n // istanbul ignore next\n if (\n parentDiv &&\n initialViewState &&\n (initialViewState?.iModel.isOpen || initialViewState?.iModel.isBlank)\n ) {\n if (!screenViewportCreated.current) {\n const screenViewport = getScreenViewport(parentDiv, initialViewState);\n screenViewportRef.current = screenViewport;\n\n if (viewportRef) viewportRef(screenViewport);\n\n Logger.logInfo(\n \"ViewportComponent\",\n `processing viewManager.addViewport for controlId=${controlId}`\n );\n viewManager.addViewport(screenViewport);\n\n // overlay component is set up once a ScreenViewport is available. The overlay component must handle any view changes itself.\n setViewOverlay(getViewOverlay ? getViewOverlay(screenViewport) : null);\n } else {\n // istanbul ignore next\n screenViewportRef.current?.changeView(initialViewState);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [controlId, initialViewState, viewportRef]);\n\n const handleContextMenu = React.useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n if (onContextMenu) onContextMenu(e);\n },\n [onContextMenu]\n );\n\n const parentDivStyle: React.CSSProperties = {\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n };\n\n const viewportDivStyle: React.CSSProperties = {\n ...style,\n height: \"100%\",\n width: \"100%\",\n };\n\n return (\n <div style={parentDivStyle} data-item-id={controlId}>\n <>\n <div\n ref={viewportDiv}\n data-testid=\"viewport-component\"\n className={className}\n style={viewportDivStyle}\n onContextMenu={handleContextMenu}\n />\n {viewOverlay}\n </>\n </div>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/imodel-components-react",
3
- "version": "4.6.2",
3
+ "version": "4.6.4",
4
4
  "description": "iTwin.js UI IModel Components",
5
5
  "main": "lib/cjs/imodel-components-react.js",
6
6
  "module": "lib/esm/imodel-components-react.js",
@@ -23,13 +23,13 @@
23
23
  },
24
24
  "peerDependencies": {
25
25
  "@itwin/appui-abstract": "^3.7.0 || ^4.0.0",
26
- "@itwin/components-react": "^4.6.2",
26
+ "@itwin/components-react": "^4.6.4",
27
27
  "@itwin/core-bentley": "^3.7.0 || ^4.0.0",
28
28
  "@itwin/core-common": "^3.7.0 || ^4.0.0",
29
29
  "@itwin/core-frontend": "^3.7.0 || ^4.0.0",
30
30
  "@itwin/core-geometry": "^3.7.0 || ^4.0.0",
31
31
  "@itwin/core-quantity": "^3.7.0 || ^4.0.0",
32
- "@itwin/core-react": "^4.6.2",
32
+ "@itwin/core-react": "^4.6.4",
33
33
  "react": "^17.0.0 || ^18.0.0",
34
34
  "react-dom": "^17.0.0 || ^18.0.0"
35
35
  },
@@ -40,14 +40,14 @@
40
40
  "devDependencies": {
41
41
  "@itwin/appui-abstract": "^3.7.0",
42
42
  "@itwin/build-tools": "^3.7.0",
43
- "@itwin/components-react": "4.6.2",
43
+ "@itwin/components-react": "4.6.4",
44
44
  "@itwin/core-bentley": "^3.7.0",
45
45
  "@itwin/core-common": "^3.7.0",
46
46
  "@itwin/core-frontend": "^3.7.0",
47
47
  "@itwin/core-geometry": "^3.7.0",
48
48
  "@itwin/core-orbitgt": "^3.7.0",
49
49
  "@itwin/core-quantity": "^3.7.0",
50
- "@itwin/core-react": "4.6.2",
50
+ "@itwin/core-react": "4.6.4",
51
51
  "@itwin/eslint-plugin": "^4.0.0-dev.45",
52
52
  "@itwin/webgl-compatibility": "^3.7.0",
53
53
  "@testing-library/dom": "^8.11.2",