AbstractThe host form component (use for EditMode, dirty notifications, etc). Set by the slot host.
OptionalFormOptional form context — same shape the collapsible-panel chrome expects. Set by the slot host.
The entity record being edited. Set by the slot host before view init.
Convenience getter for read-only / edit-mode rendering. Falls back to
false when the panel is shown outside a BaseFormComponent host (e.g.,
a dashboard quick-edit dialog reusing the same panel — see the
"composable panel" docs).
Override to add per-panel validation that should block the parent form's
Save(). Return { Success: true, Errors: [] } when valid, or include
ValidationErrorInfo entries to surface field-level errors. The default
implementation reports valid (panels that don't need extra validation
can leave this method off).
Abstract base for every dynamically-injectable form panel.
Subclasses are standalone Angular components decorated with
@RegisterClass(BaseFormPanel, { metadata: { entity, slot, sortKey? } }). At runtime,<mj-form-panel-slot>discovers matching registrations viaClassFactory.GetAllRegistrationsByMetadata, instantiates each viaViewContainerRef.createComponent, and wiresRecord+FormComponent+FormContextinto the inputs.Lifecycle hooks: standard Angular
ngOnInit/ngOnDestroywork as usual.Recordis guaranteed to be set before the first change-detection pass.Optional
validate()returns a synchronous validation result; the parentBaseFormComponent.Save()path will surface it via the existing validation pipeline when called. Panels that don't validate anything beyond what the record itself does can leave this method off.