UNPKG

terriajs

Version:

Geospatial data visualization platform.

64 lines (57 loc) 2.25 kB
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[]; }