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>

    Hierarchy (View Summary)

    Implements

    • DoCheck
    • OnInit
    • OnDestroy
    Index

    Constructors

    Properties

    Accessors

    Methods

    Constructors

    Properties

    AdditionalActionsTemplate: TemplateRef<unknown> | null = null

    Optional template for additional toolbar actions

    AttachmentCount: number = 0

    Number of attachments linked to this record

    AttachmentsAvailable: boolean = false

    Whether the attachments feature is available for this record

    AttachmentsPanelToggled: EventEmitter<void> = ...

    Emitted when the Attachments button is clicked

    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

    BeforeRefresh: EventEmitter<BeforeRefreshEventArgs> = ...

    Emitted BEFORE refresh - 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

    ChromeLayout: "accordion" | "left-nav" | "right-nav" = 'accordion'

    Form chrome layout. Expand/collapse-all only render for accordion. Left-nav and right-nav show one section at a time.

    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> = ...
    FormComponent: unknown = null

    Reference to the form component instance for event payloads

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

    Request to show record change history

    IsAttachmentsPanelOpen: boolean = false

    Whether the attachments panel is currently open

    IsDirty: boolean = false

    Whether the record has unsaved changes

    IsFavorite: boolean = false

    Whether the record is currently a favorite

    IsRefreshing: boolean = false

    Whether a refresh from database operation is currently in progress

    IsSaving: boolean = false

    Whether to show the toolbar in a saving/loading state

    IsTagsPanelOpen: boolean = false

    Whether the tags panel is currently open

    ItemOverrides: ReadonlyMap<string, Partial<FormToolbarItemConfig>> | null = null

    Toolbar item property overrides

    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.)

    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.

    Record: BaseEntity

    The entity record being displayed/edited

    RefreshRequested: EventEmitter<void> = ...

    Request to refresh the current record from the database

    RegisteredItems: FormToolbarItemConfig[] = []

    Dynamic toolbar items registered by FormComponent or BaseFormPanels

    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

    ToolbarItemClick: EventEmitter<FormToolbarItemClickEventArgs> = ...

    Emitted when any toolbar item (standard or custom) 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> = ...
    "ɵdir": unknown
    "ɵfac": ɵɵFactoryDeclaration<BaseAngularComponent, never>

    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 ProviderToUse(): IMetadataProvider

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

      Returns IMetadataProvider

    • get RecordDisplayName(): string

      Display name for the edit banner.

      The Name field is readable by the current user in almost every case, but it is an ordinary field and field-level security can deny it. BaseEntity.Get() THROWS on a denied field, and this getter runs on every change-detection cycle for the toolbar that sits on top of every form — so an unguarded read here does not hide a title, it takes the whole form down. Fall back to the primary key, which is unrestrictable by construction.

      Returns string

    • 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

    • 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

    • A callback method that performs change-detection, invoked after the default change-detector has checked the directive's input bindings in the parent template. See KeyValueDiffers and IterableDiffers for implementing custom change checking for collections.

      Returns void

    • A callback method that is invoked immediately after the default change detector has checked the directive's data-bound properties for the first time, and before any of the view or content children have been checked. It is invoked only once when the directive is instantiated.

      Returns void

    • 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