terriajs
Version:
Geospatial data visualization platform.
46 lines • 1.69 kB
JavaScript
import { action } from "mobx";
import { observer } from "mobx-react";
import { useEffect } from "react";
import ClippingMixin from "../../../ModelMixins/ClippingMixin";
import RepositionClippingBox from "./RepositionClippingBox";
const TOOL_NAME = "reposition-clipping-box";
/**
* A component that launches the clipping box repositioning tool when it gets
* triggerred by the user.
*/
const ClippingBoxToolLauncher = observer(({ viewState }) => {
const item = findItemRequiringRepositioning(viewState.terria.workbench);
const cesium = viewState.terria.cesium;
useEffect(function init() {
if (!item || !cesium) {
return;
}
viewState.openTool({
toolName: TOOL_NAME,
getToolComponent: () => RepositionClippingBox,
params: { viewState, item, cesium }
});
return action(function cleanup() {
const currentTool = viewState.currentTool;
if (currentTool &&
currentTool.toolName === TOOL_NAME &&
currentTool.params?.item === item) {
item.repositionClippingBoxTrigger = false;
viewState.closeTool();
}
});
},
/* eslint-disable-next-line react-hooks/exhaustive-deps */
[item, cesium]);
return null;
});
/**
* Find a workbench item that requires clipping box respositioning
*/
function findItemRequiringRepositioning(workbench) {
return workbench.items.find((it) => ClippingMixin.isMixedInto(it) &&
it.clippingBoxDrawing &&
it.repositionClippingBoxTrigger);
}
export default ClippingBoxToolLauncher;
//# sourceMappingURL=ClippingBoxToolLauncher.js.map