Optional template for additional toolbar actions
Number of attachments linked to this record
Whether the attachments feature is available for this record
Emitted when the Attachments button is clicked
Emitted BEFORE cancel - can be cancelled by setting event.Cancel = true
Emitted BEFORE delete - can be cancelled by setting event.Cancel = true
Emitted BEFORE history view - can be cancelled by setting event.Cancel = true
Emitted BEFORE list management - can be cancelled by setting event.Cancel = true
Emitted BEFORE refresh - can be cancelled by setting event.Cancel = true
Emitted BEFORE save - can be cancelled by setting event.Cancel = true
Request to cancel editing and revert changes
Form chrome layout. Expand/collapse-all only render for accordion. Left-nav and right-nav show one section at a time.
Toolbar configuration controlling visibility and behavior
The currently-applied variant ID, or null when the Default form is active.
Emitted when a custom toolbar button is clicked
Request to delete the current record
Computed descendant tree for breadcrumb display
Names of dirty fields for display in save bar
Whether the form is in edit mode
Request to enter or exit edit mode
Entity info for IS-A hierarchy and metadata
Whether favorite init has completed (prevents flash of wrong icon)
Request to toggle favorite status
Reference to the form component instance for event payloads
Request to show record change history
Whether the attachments panel is currently open
Whether the record has unsaved changes
Whether the record is currently a favorite
Whether a refresh from database operation is currently in progress
Whether to show the toolbar in a saving/loading state
Whether the tags panel is currently open
Toolbar item property overrides
Count of lists this record belongs to
Request to show list management
Emitted for all navigation actions (record links, hierarchy clicks, etc.)
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.
The entity record being displayed/edited
Request to refresh the current record from the database
Dynamic toolbar items registered by FormComponent or BaseFormPanels
Request to save the current record
Request to show dirty field changes
Number of tags applied to this record
Emitted when the Tags button is clicked
Emitted when any toolbar item (standard or custom) is clicked
Whether the current user has delete permission
Whether the current user has edit permission
Whether the variant-picker dropdown is currently open.
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).
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.
Number of record change versions for this record (displayed as "vN" badge on history button)
StaticɵdirStaticɵfacThe 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.
Child entity types from metadata (all possible subtypes)
Label for the currently-active variant, or "Default form" when none.
Display-friendly names of dirty fields for the edit banner
Whether this entity has child entity types (IS-A parent)
Whether this record has a loaded IS-A child entity
Whether the current record has overlapping child types discovered
Whether this entity has parent entities (IS-A child)
Whether this entity is part of any IS-A hierarchy (parent or child side)
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.
IS-A parent chain for breadcrumb display
Returns either the default Metadata provider or the one specified in the Provider property, if it was specified
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.
Resolves all standard and custom toolbar items into their active runtime state, evaluated against the current Record and EditMode.
Returns either the default RunQuery provider or the one specified in the Provider property, if it was specified
Returns either the default RunView provider or the one specified in the Provider property, if it was specified
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.
Whether entity tracks record changes (for history button)
Force a recompute of the IS-A descendant breadcrumb. Needed after in-place record refresh because the Record object identity does not change, so CheckDescendantChains would otherwise skip.
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.
A callback method that performs custom clean-up, invoked immediately before a directive, pipe, or service instance is destroyed.
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.
Navigate to a loaded child entity record in the IS-A hierarchy. The child shares the same primary key as the parent (IS-A inheritance).
Navigate to a descendant entity record in the IS-A hierarchy.
Navigate to an overlapping child entity record. Used when the parent has AllowMultipleSubtypes = true and multiple child types coexist for the same PK.
Navigate to a parent entity record in the IS-A hierarchy.
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.
Compact subtitle for a variant menu row: "Scope · Status".
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.
Example