Member Junction
    Preparing search index...

    Configurable form toolbar component.

    Renders action buttons (edit, save, delete, favorite, history, lists), the IS-A entity hierarchy breadcrumb, and section controls (search, expand/collapse).

    All navigation actions are emitted as events - the toolbar never calls any routing service directly. The host application subscribes and maps to its own navigation.

    <mj-form-toolbar
    [record]="record"
    [editMode]="editMode"
    [config]="toolbarConfig"
    (Navigate)="onNavigate($event)"
    (EditModeChange)="editMode = $event"
    (SaveRequested)="onSave()"
    (DeleteRequested)="onDelete()">
    </mj-form-toolbar>

    Implements

    • DoCheck
    Index

    Constructors

    Properties

    Accessors

    Methods

    Constructors

    Properties

    AdditionalActionsTemplate: TemplateRef<unknown> | null = null

    Optional template for additional toolbar actions

    BeforeCancel: EventEmitter<BeforeCancelEventArgs> = ...

    Emitted BEFORE cancel - can be cancelled by setting event.Cancel = true

    BeforeDelete: EventEmitter<BeforeDeleteEventArgs> = ...

    Emitted BEFORE delete - can be cancelled by setting event.Cancel = true

    BeforeHistoryView: EventEmitter<BeforeHistoryViewEventArgs> = ...

    Emitted BEFORE history view - can be cancelled by setting event.Cancel = true

    BeforeListManagement: EventEmitter<BeforeListManagementEventArgs> = ...

    Emitted BEFORE list management - can be cancelled by setting event.Cancel = true

    BeforeSave: EventEmitter<BeforeSaveEventArgs> = ...

    Emitted BEFORE save - can be cancelled by setting event.Cancel = true

    CancelRequested: EventEmitter<void> = ...

    Request to cancel editing and revert changes

    CollapseAllRequested: EventEmitter<void> = ...
    Config: FormToolbarConfig = DEFAULT_TOOLBAR_CONFIG

    Toolbar configuration controlling visibility and behavior

    CurrentVariantID: string | null = null

    The currently-applied variant ID, or null when the Default form is active.

    CustomButtonClick: EventEmitter<CustomToolbarButtonClickEventArgs> = ...

    Emitted when a custom toolbar button is clicked

    DeleteRequested: EventEmitter<void> = ...

    Request to delete the current record

    DescendantTree: IsaRelatedItem[] = []

    Computed descendant tree for breadcrumb display

    DirtyFieldNames: string[] = []

    Names of dirty fields for display in save bar

    EditMode: boolean = false

    Whether the form is in edit mode

    EditModeChange: EventEmitter<boolean> = ...

    Request to enter or exit edit mode

    EntityInfo: EntityInfo | null = null

    Entity info for IS-A hierarchy and metadata

    ExpandAllRequested: EventEmitter<void> = ...
    ExpandedSectionCount: number = 0
    FavoriteInitDone: boolean = false

    Whether favorite init has completed (prevents flash of wrong icon)

    FavoriteToggled: EventEmitter<void> = ...

    Request to toggle favorite status

    FilterChange: EventEmitter<string> = ...
    HasCustomSectionOrder: boolean = false
    HistoryRequested: EventEmitter<void> = ...

    Request to show record change history

    IsDirty: boolean = false

    Whether the record has unsaved changes

    IsFavorite: boolean = false

    Whether the record is currently a favorite

    IsSaving: boolean = false

    Whether to show the toolbar in a saving/loading state

    IsTagsPanelOpen: boolean = false

    Whether the tags panel is currently open

    ListCount: number = 0

    Count of lists this record belongs to

    ListManagementRequested: EventEmitter<void> = ...

    Request to show list management

    ManageSectionsRequested: EventEmitter<void> = ...
    Navigate: EventEmitter<FormNavigationEvent> = ...

    Emitted for all navigation actions (record links, hierarchy clicks, etc.)

    Record: BaseEntity

    The entity record being displayed/edited

    ResetSectionOrderRequested: EventEmitter<void> = ...
    SaveRequested: EventEmitter<void> = ...

    Request to save the current record

    SearchFilter: string = ''
    ShowChangesRequested: EventEmitter<void> = ...

    Request to show dirty field changes

    ShowDeleteDialog: boolean = false
    ShowDiscardDialog: boolean = false
    ShowEmptyFields: boolean = false
    ShowEmptyFieldsChange: EventEmitter<boolean> = ...
    TagCount: number = 0

    Number of tags applied to this record

    TagsPanelToggled: EventEmitter<void> = ...

    Emitted when the Tags button is clicked

    TotalSectionCount: number = 0
    UserCanDelete: boolean = false

    Whether the current user has delete permission

    UserCanEdit: boolean = false

    Whether the current user has edit permission

    VariantMenuOpen: boolean = false

    Whether the variant-picker dropdown is currently open.

    VariantPicked: EventEmitter<string | null> = ...

    Emitted when the user picks an item from the form-variant dropdown. Payload is the override ID for a specific variant, or null when the user picks the "Default form" row (CodeGen / Angular fallback).

    Variants: {
        ID: string;
        Label: string;
        Scope: "User" | "Role" | "Global";
        Status: "Active" | "Pending" | "Inactive";
    }[] = []

    Available form variants for this entity. When the array has >1 entry and Config.ShowFormVariantPicker is true, the toolbar renders a right-side "form picker" button (icon) that opens a dropdown with the Default form + each variant. Picking emits VariantPicked with the override ID, or null for the CodeGen Angular default.

    Shape is intentionally minimal — Generic doesn't depend on the resolver row type. Hosts shape their data into this. See VariantPickerItem on the container for the canonical shape.

    VersionCount: number = 0

    Number of record change versions for this record (displayed as "vN" badge on history button)

    VisibleSectionCount: number = 0
    WidthMode: FormWidthMode = 'centered'
    WidthModeChange: EventEmitter<FormWidthMode> = ...

    Accessors

    • get ChildChain(): BaseEntity<unknown>[]

      The actual loaded IS-A child chain for the current record. Walks Record.ISAChild → ISAChild.ISAChild → ... collecting each child entity. This differs from ChildEntities (metadata) because it represents the SPECIFIC child type that exists for THIS record, not all possible subtypes.

      For overlapping subtype parents, this is empty (ISAChild returns null) — use OverlappingChildren instead.

      Returns BaseEntity<unknown>[]

    • get OverlappingChildren(): { entityName: string }[]

      For overlapping subtype parents (AllowMultipleSubtypes = true), returns the list of child entity type names that have records for this PK. Populated by InitializeChildEntity() during record load.

      Returns { entityName: string }[]

    • get ShowVariantPickerButton(): boolean

      True iff the toolbar should render the variant-picker button.

      Note the threshold is >= 1, NOT > 1. The picker menu always includes the "Default form" row (CodeGen / Angular fallback) — that row isn't in Variants; it's rendered unconditionally as the first row inside the menu. So any single variant still yields a real choice (Default vs that variant) and the picker should appear. The inline-strip implementation that this replaces used > 1 and therefore hid the picker for entities with exactly one override, which made that override unreachable from the UI.

      Returns boolean

    Methods

    • Navigate to an overlapping child entity record. Used when the parent has AllowMultipleSubtypes = true and multiple child types coexist for the same PK.

      Parameters

      • childEntityName: string
      • event: MouseEvent

      Returns void

    • User picked a row in the variant menu. Closes the menu and emits VariantPicked (null → "Default form" / CodeGen Angular; UUID → specific override). No-op when the picked value matches the current.

      Parameters

      • variantID: string | null

      Returns void