The currently-active view type's option (the plug-in being mounted). Null until the registry resolves / a type is selected. Drives the dynamic-mount host in the template.
The currently-active view type's stable key (descriptor Name). Null until the registry resolves.
Emitted AFTER the active view type has changed (and, when AutoSaveView is on, after it has been persisted). Notification only.
Emitted AFTER a plug-in renderer's configuration change has been applied (and persisted when AutoSaveView is on).
When true, the viewer persists view-type/config changes itself — to the loaded UserView
record (when a ViewEntity/ViewID is present) or to per-user User Settings (the default-view
case). When false (the default), the viewer only emits the Before…/After… events and the
consumer is responsible for persistence. Persistence is provider-based (generic-safe) — never
routing, which stays with the host app.
The view-type options shown in the switcher, sourced from ViewTypeEngine
(the MJ: View Types registry), filtered by each descriptor's availability predicate.
Every option is a dynamic-mounted plug-in.
Emitted (cancelable) BEFORE the active view type changes. A handler may set
args.Cancel = true to veto the switch. Fires for both built-in and plug-in types.
Emitted (cancelable) BEFORE a plug-in renderer's configuration change is applied/persisted.
Bubbled up from a plug-in renderer asking the host to open this view's configuration UI (e.g. the grid's "Manage Columns" affordance). The host (the view workspace) owns the config panel; the container just forwards the request. See IViewRenderer.configureRequested.
NAVIGATION request bubbled up from a plug-in renderer to create a new record of the current entity (e.g. a grid's "New" button). Opening the create form is a routing concern owned by the outer app; the container forwards it without acting on it.
Emitted when data is loaded
Emitted when filtered count changes
Emitted when filter text changes (for two-way binding)
Track which records matched on hidden (non-visible) fields
Current sort state
NAVIGATION request bubbled up from a plug-in renderer to open a related record on a (possibly different) entity — e.g. a grid foreign-key drill-through. Routing lives in the outer app, so this is one of the few signals that legitimately bubbles up. The container forwards it untouched.
Pagination state
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.
Emitted when a record should be opened (double-click or open button)
Emitted when a record is selected (single click)
Whether to render the Recycle Bin chip in the viewer header. The chip auto-hides itself when the entity has no deleted records, doesn't track changes, or the user lacks Delete permission — so it stays out of the way on entities where it's not relevant.
Whether the view-type dropdown menu is currently open.
Whether the registry (ViewTypeEngine) successfully sourced the available view types.
StaticɵdirStaticɵfacThe MJ: View Types row ID of the currently-active view type, or null before the registry
resolves. Lets external chrome (the workspace toolbar switcher) reflect the viewer's active
type without reaching into the viewer's internal ViewModeOptions.
Returns the switcher option for the active view type (for the current-type chip in the switcher), or null before the registry resolves.
Configuration options for the viewer
Current (1-based) page number the grid is showing. Internally stored 0-based.
Number of records loaded per page.
The grid's active sort state, or null when unsorted.
Get the records to display (external or internal)
Get merged configuration with defaults
Get the effective entity - uses entity input if provided, otherwise derives from viewEntity This allows callers to provide just a viewEntity without explicitly setting the entity input. Uses fallback resolution when ViewEntityInfo is not available.
Get the effective filter text (external or internal)
Get the effective sort state (external or internal)
The entity to display records for
Convenience input: the entity to display by ID. Resolved internally to an EntityInfo
and applied through the entity setter.
Convenience input: the entity to display by name. Resolved internally to an EntityInfo
via the active provider and applied through the entity setter. Use this OR [entity]
OR [EntityID] — whichever is most convenient for the consumer.
Get filtered records - when using server-side filtering, records are already filtered When using client-side filtering, apply filter locally
External filter text - allows parent to control filter Supports two-way binding: [(filterText)]="state.filterText"
Canonical grid state for the current view — the single, framework-wide source of truth for a
view's columns (visibility / order / width / formatting), sort, filter and aggregates. It is
the UserView.GridState column, also read by MJUserViewEntity.Columns, the GraphQL data
provider's server-side field list, the config panel, and export.
Any view type that IViewTypeDescriptor.UsesCanonicalGridState is backed by this store rather than by an opaque per-view-type blob (see effectiveRendererConfig). Reactive: when the host updates this after the renderer is mounted (e.g. the config panel just saved new columns), we re-push the active renderer's config so the change reflects without a full reload.
True once a plug-in view type is mounted (drives the dynamic host's visibility).
True when the "no records" empty state is the result of an active filter.
Title shown in the "no records" empty state — varies with the active filter.
Returns either the default Metadata provider or the one specified in the Provider property, if it was specified
Pre-loaded records (optional - if not provided, component loads data)
Returns either the default RunQuery provider or the one specified in the Provider property, if it was specified
Returns either the default RunReport 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
Currently selected record ID (primary key string)
Total page count derived from total records and page size (min 1).
Total records available for the current entity/view/filter (from the server).
Optional User View entity that provides view configuration When provided, the component will use the view's WhereClause, GridState, SortState, etc. The view's filter is additive - UserSearchString is applied ON TOP of the view's WhereClause
Convenience input: load and display a saved view by its MJ: User Views ID. The viewer
loads the record via the active provider and applies it through the viewEntity setter
(which also resolves the entity if [entity]/[EntityName]/[EntityID] weren't supplied).
Per-view-type configuration provided by the host (e.g. Explorer reading
UserView.DisplayState.viewTypeConfigs). The active type is controlled separately via
the viewMode / ViewTypeID inputs; this carries only the config payloads.
The initial/active view type to open in, by MJ: View Types row ID. Hosts that persist
the selection (e.g. Explorer's UserView.ViewTypeID) bind this so the viewer opens in the
saved type — built-in OR plug-in. Applied once the registry resolves; later user switches
emit viewTypeChange for the host to persist.
Apply a server-side sort by field + direction and reload. Returns true when the sort was applied, false when sorting isn't applicable (externally supplied records).
Clear the filter
Hook retained for hosts (e.g. the workspace) that call this before switching views/entities. View-type-specific persistence (e.g. a grid's live column/sort state) is now owned by the mounted plug-in renderer, so the container has nothing to flush — this is a no-op.
Export the current view's records via the active renderer's optional imperative export (IViewRenderer.exportRecords). Returns false when no renderer is mounted or the active view type doesn't support export (e.g. timeline/map). The grid renderer downloads the file itself; this is the no-UI entry point for an external driver (the AI agent).
Optionalformat: "csv" | "excel" | "json"Get the name of the hidden field that matched for display
Navigate to a specific (1-based) page. Clamps to the valid range. Returns the page actually navigated to, or null when paging isn't applicable (externally supplied records).
Check if a record matched on a hidden field
Load data for the current entity with server-side filtering/sorting/pagination
Advance to the next page (no-op past the last page). Returns the new 1-based page or null.
A callback method that is invoked immediately after Angular has completed initialization of a component's view. It is invoked only once when the view is instantiated.
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.
Handle filter input change
Go to the previous page (no-op before the first page). Returns the new 1-based page or null.
Refresh data (re-load from server, starting at page 1) Keeps existing records visible during refresh for better UX
Programmatically select a record — the no-UI equivalent of a user row-click. Highlights the row (by pushing SelectedRecordID down to the active renderer) AND emits RecordSelected so the host runs its selection path (open the detail panel, etc.). Returns false when there's no entity context. This is the entry point for an external driver (the AI agent's SelectRecord tool); the record must be one of the loaded rows.
a record from the currently-loaded set
true when selection was applied, false when no entity context is available
Selects a view type from the switcher. Built-in types route to setViewMode
(preserving the rich grid/cards/timeline/map integration); plug-in types are
dynamic-mounted via the descriptor's RendererComponent. Emits viewTypeChange
so hosts can persist UserView.ViewTypeID.
Selects a view type by its MJ: View Types row ID. This is the entry point used by external
chrome (e.g. the workspace toolbar's ViewTypeSwitcherComponent) that surfaces the
switcher outside the viewer's own header. Resolves the matching available option and applies
it through the same lifecycle as a header-driven switch (cancelable events + persistence).
No-op when the ID isn't an available view type or is already active.
the MJ: View Types row ID to switch to.
Set the server-side page size and reload from page 1. Returns the size applied, or null when paging isn't applicable (externally supplied records).
EntityViewerComponent - Full-featured composite component for viewing entity data
This component provides a complete data viewing experience with:
Example