terriajs
Version:
Geospatial data visualization platform.
64 lines (57 loc) • 2.25 kB
text/typescript
import { PanelMenuProps } from "../../ReactViews/Workflow/PanelMenu";
import { IconProps } from "../../Styled/Icon";
import { BaseModel } from "../Definition/Model";
import {
SelectableDimensionGroup,
SelectableDimension
} from "../SelectableDimensions/SelectableDimensions";
import ViewState from "../../ReactViewModels/ViewState";
import Terria from "../Terria";
import { runInAction } from "mobx";
/**
* Model for SelectableDimensionWorkflow. Basically just includes a bunch of selectableDimensions, name, icon and a catalog member.
* This can be used to create "workflows" that display SelectableDimensions in a side panel above the Workbench
*
* See `lib/ReactViews/Workflow/Workflows/SelectableDimension/SelectableDimensionWorkflow.tsx` for more info and usage
*/
export default interface SelectableDimensionWorkflow {
/** Human readable name - used as title */
name: string;
icon: IconProps["glyph"];
/** Item to which this workflow belongs **/
item: BaseModel;
onClose?: () => void;
/** Footer button */
footer?: { onClick: () => void; buttonText: string };
menu?: PanelMenuProps;
/** This allows up to two levels of SelectableDimensionGroup */
selectableDimensions: SelectableDimensionWorkflowGroup[];
}
/**
* Runs a selectable dimension workflow which is a workflow for a workbench item.
*
* @param viewStateOrTerria - The {@link ViewState} or {@link Terria} instance
* @param workflow - A {@link SelectableDimensionWorkflow} instance
*/
export function runWorkflow(
viewStateOrTerria: ViewState | Terria,
workflow: SelectableDimensionWorkflow
) {
runInAction(() => {
const terria =
viewStateOrTerria instanceof Terria
? viewStateOrTerria
: viewStateOrTerria.terria;
terria.selectableDimensionWorkflow = workflow;
});
}
/** This is essentially the same as `SelectableDimensionGroup`, but allows two levels of nested `SelectableDimensionGroup`, instead of one */
export interface SelectableDimensionWorkflowGroup extends Omit<
SelectableDimensionGroup,
"selectableDimensions" | "placement"
> {
/** Group is **open** by default */
isOpen?: boolean;
// Here we allow two levels of nested groups
readonly selectableDimensions: SelectableDimension[];
}