Member Junction
    Preparing search index...

    Base class for all Angular components in the MemberJunction system.

    Hierarchy (View Summary)

    Implements

    • OnDestroy
    Index

    Constructors

    Properties

    AfterContextMenuAction: EventEmitter<FlowAfterContextMenuActionEventArgs> = ...
    AfterDependencyAdded: EventEmitter<AfterDependencyAddedEventArgs> = ...
    AfterDependencyRemoved: EventEmitter<AfterDependencyRemovedEventArgs> = ...
    AfterTaskAdded: EventEmitter<AfterTaskAddedEventArgs> = ...
    AfterTaskRemoved: EventEmitter<AfterTaskRemovedEventArgs> = ...
    AfterTaskUpdated: EventEmitter<AfterTaskUpdatedEventArgs> = ...
    AgentOpenRequested: EventEmitter<AgentOpenRequestedEventArgs> = ...

    Intent-only — the host navigates; this widget has no Router and must not acquire one.

    AutoLayoutDirection: FlowLayoutDirection = 'vertical'
    AvailableActionNames: readonly string[] = []

    Action names offered when assigning a step. Same ownership rule as AvailableAgentNames.

    AvailableAgentNames: readonly string[] = []

    Agent names offered when assigning a step. Supplied by the host, which owns data access — this is a widgets-layer component and does not query.

    BeforeContextMenu: EventEmitter<FlowBeforeContextMenuEventArgs> = ...
    BeforeDependencyAdded: EventEmitter<BeforeDependencyAddedEventArgs> = ...
    BeforeDependencyRemoved: EventEmitter<BeforeDependencyRemovedEventArgs> = ...
    BeforeTaskAdded: EventEmitter<BeforeTaskAddedEventArgs> = ...
    BeforeTaskRemoved: EventEmitter<BeforeTaskRemovedEventArgs> = ...
    BeforeTaskUpdated: EventEmitter<BeforeTaskUpdatedEventArgs> = ...
    canvas: FlowEditorComponent | undefined
    Connections: FlowConnection[] = []
    ConnectionSelected: EventEmitter<FlowConnection | null> = ...

    A connection was clicked. Payload is the canvas connection, or null when cleared.

    EmptyStateMessage: string = 'No steps yet. Add one to start building this workflow.'

    Shown when there is nothing to draw yet.

    IsValid: boolean = true
    LegendToggled: EventEmitter<boolean> = ...

    The legend was shown or hidden from the canvas toolbar.

    Forwarded so a host can PERSIST the choice. Without it the toolbar's toggle mutates the canvas's own flag and nothing else, so the preference dies with the view — and a host that wanted it remembered would have to add a second control beside the one that already exists, which is how a surface ends up with two buttons doing the same thing and disagreeing.

    Nodes: FlowNode[] = []
    NodeTypes: FlowNodeTypeConfig[] = ...
    Provider: IMetadataProvider | null

    If specified, this provider will be used for communication and for all metadata purposes. By default, if not provided, the Metadata and RunView classes are used for this and the default GraphQLDataProvider is used which is connected to the same back-end MJAPI instance as the Metadata and RunView classes. If you want to have this component connect to a different MJAPI back-end, create an instance of a ProviderBase sub-class like GraphQLDataProvider/etc, and configure it as appropriate to connect to the MJAPI back-end you want to use, and then pass it in here.

    ReadOnly: boolean = false

    Read-only mode. The same component is the viewer — there is no second, weaker renderer.

    RecordOpenRequested: EventEmitter<RecordOpenRequestedEventArgs> = ...
    SelectedTask: TaskGraphSpecNode | null = null
    SelectionChanged: EventEmitter<TaskGraphSelectionChangedEventArgs> = ...
    ShowLegend: boolean = true

    Whether the legend rides on the canvas.

    On for authoring, off for a run — and the difference is what the legend is FOR. It explains the authoring vocabulary (what a conditional edge means, what a duplicate default looks like), which is what someone drawing a graph needs. A run view is answering a different question — what happened — and the legend answers none of it while occluding a third of the canvas.

    ShowMinimap: boolean = true
    ShowPalette: boolean = true
    ShowProperties: boolean = true

    Whether the properties panel rides alongside the canvas.

    On by default, because without it a step added from the palette can never be named or assigned — the canvas draws structure, the panel supplies content, and one without the other is a graph the author can build but not finish. Hosts embedding the read-only viewer in a chat card turn it off.

    ShowStatusBar: boolean = true
    ShowToolbar: boolean = true
    SpecChanged: EventEmitter<TaskGraphSpecChangedEventArgs> = ...
    ToolbarAlign: FlowToolbarAlign = 'center'
    ToolbarVisibility: FlowToolbarVisibility = 'shown'

    Full bar / chip / recover tab. Run views default this to minimized.

    ValidationChanged: EventEmitter<TaskGraphValidationChangedEventArgs> = ...
    ValidationErrors: readonly TaskGraphValidationError[] = []
    "ɵdir": unknown
    "ɵfac": ɵɵFactoryDeclaration<BaseAngularComponent, never>

    Accessors

    • set NodePositions(value: ReadonlyMap<string, FlowPosition> | null): void

      Geometry for the nodes, keyed by tempId. Supplying it places the graph instead of laying it out.

      Why a host must be able to supply this. The spec has no layout field, so without it every node projects to the origin — all of them, stacked in one place — and the canvas is left to rescue the situation with a deferred Dagre pass. That pass is fine in the editor, where the author is present and can rearrange. It was not fine in the RUN views, which held the real geometry (a workflow's authored positions, or a computed layout) and had no way to hand it over: every run rendered its steps piled on the origin, and the zoom-to-fit that followed fitted a bounding box one node wide and blew the viewport up past 250%.

      Applied as the starting geometry only. Once the canvas reports positions of its own — a drag, an arrange — those win, because the person moving a node is the authority on where it goes.

      Parameters

      Returns void

    • get ProviderToUse(): IMetadataProvider

      Returns either the default Metadata provider or the one specified in the Provider property, if it was specified

      Returns IMetadataProvider

    • get RunQueryToUse(): IRunQueryProvider

      Returns either the default RunQuery provider or the one specified in the Provider property, if it was specified

      Returns IRunQueryProvider

    • get RunViewToUse(): IRunViewProvider

      Returns either the default RunView provider or the one specified in the Provider property, if it was specified

      Returns IRunViewProvider

    Methods

    • Adds a dependency edge. Returns false when it was vetoed or would create a cycle.

      The cycle is refused unconditionally, not merely reported: a cyclic graph can never execute — nothing would ever become eligible — so allowing the canvas to draw one would let a user build something the engine must then reject. Better to refuse the stroke than to accept a graph that cannot run.

      Parameters

      • fromTempId: string
      • toTempId: string
      • Optionalcondition: string

      Returns boolean

    • A palette entry was clicked or dragged onto the canvas.

      This binding is the bug. The canvas has always emitted NodeAdded for a palette drop, and this component simply never listened — so the node the canvas announced was thrown away, the spec never gained a task, and the author was told "a task graph must contain at least one task" no matter how many times they tried to add one. The canvas does not mutate its own Nodes on purpose (the host owns the model); an unheard event is therefore a silent no-op rather than a visible failure, which is why it survived.

      The new step is selected immediately: it lands unnamed and, for an agent or action step with nothing available to default to, unassigned — so the properties panel is where the author has to go next, and putting them there beats making them find it.

      Parameters

      Returns void

    • The canvas is the authority on geometry, so remember what it reports.

      Without this the spec — which has no geometry field — is the only survivor of a re-projection, and every edit silently moved every node back to the origin. That is what forced a re-arrange (and therefore a re-zoom) on each change.

      Parameters

      Returns void

    • Sets — or with an empty string, clears — a dependency edge's condition.

      Implemented as remove-then-add so it travels the same Before*/After* path as any other edge change. A separate silent mutation would be a second write path into the spec, and the veto contract would then be right in one place and wrong in the other.

      Parameters

      • fromTempId: string
      • toTempId: string
      • condition: string

      Returns boolean