Emitted AFTER a view delete has been persisted. Notification only.
Emitted AFTER a view save has been persisted. Notification only.
When true, the workspace persists view CRUD itself (BaseEntity .Save()/.Delete() plus
UserInfoEngine for the default-view settings) and fires the cancelable Before… / notification
After… events around each persistence operation. When false (the default) the workspace only
emits the change-request events and the host persists. Persistence is provider-based and
generic-safe — it never performs routing.
Emitted (cancelable) BEFORE a view delete is persisted. A handler may set Cancel = true to veto.
Only fires when AutoSaveView is true.
Emitted (cancelable) BEFORE a view save is persisted. A handler may set Cancel = true to veto.
Only fires when AutoSaveView is true.
Emitted when the user asks to create a new record for the current entity — either from the selector or bubbled up from a plug-in renderer's "New" button. The host opens the form.
Live grid state (column widths / order / sort / aggregates) reflecting user interaction.
The currently selected view entity (null = the default/unsaved view).
Emitted when the inner viewer finishes loading data — carries counts, timing and the records.
Whether the config panel opens in "save as new" mode.
Emitted when the user requests a delete and AutoSaveView is false. The host persists.
Source view name shown in the duplicate-view dialog.
Summary shown in the duplicate-view dialog.
Emitted when the user requests a duplicate and AutoSaveView is false. The host persists.
Carries the source view ID and the chosen name for the copy.
Protected OptionalentityReference to the entity viewer (for flushing pending grid changes + reloading data).
The filter fields available in the filter dialog.
The filter state currently being edited in the filter dialog.
Emitted when the inner viewer's filtered/total counts change.
The current free-text filter.
Emitted when the inner viewer's filter text changes (two-way friendly with FilterText).
Whether the slide-in config panel is open.
Whether the full-width filter dialog is open.
Whether a save operation is in progress (drives the saving spinners).
Records loaded by the viewer, kept for config-panel sample data.
Emitted when the user opens a record (double-click / open). The host performs the navigation.
NAVIGATION request bubbled up from a plug-in renderer (via the inner viewer) to open a related record on a (possibly different) entity — e.g. a grid foreign-key drill-through. The host routes.
Emitted when the user asks to open the current view in its own tab. Carries the MJ: User Views
row ID. The host performs the navigation.
Pre-populated description carried from quick-save dialog into the config panel.
Pre-populated sharing preference carried from quick-save dialog into the config panel.
Pre-populated name carried from quick-save dialog into the config panel.
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.
Summary shown in the quick-save dialog.
Emitted when a record is selected (single click) in the viewer.
Emitted when the user saves per-user default view settings and AutoSaveView is false.
Emitted when the user requests a save and AutoSaveView is false. The host persists.
The currently selected record's composite-key string (for grid highlight).
Two-way-binding companion for SelectedView.
The currently selected view ID (null = default view).
Whether the duplicate-view dialog is open.
Whether the quick-save dialog is open.
Whether the shared-view warning dialog is open.
Protected OptionalviewReference to the config panel (for building summaries + canEdit checks).
Partial EntityViewerConfig forwarded to the inner viewer (toolbar/pagination/etc.).
Whether the current view has unsaved modifications.
Emitted when the selected view changes (selection, save, delete). Notification only.
Protected OptionalviewReference to the view selector (for reloading the view list after CRUD).
StaticɵdirStaticɵfacThe active view type's MJ: View Types row ID, read from the inner viewer for the toolbar
switcher's active highlight. Safe to read in the template — it reflects the viewer's own
resolved state rather than driving it.
The entity whose data this workspace browses. May be supplied directly, or resolved from EntityName / EntityID. When it changes the selected view and config panel reset.
Convenience input: resolve Entity by entity ID via the active provider. Use this OR Entity OR EntityName.
The free-text filter to apply to the inner viewer. When a host owns the filter box it binds this (typically a debounced value); the workspace's filterText field tracks it.
The Config forwarded to the inner viewer. Merges the host-supplied ViewerConfig but
always forces showViewModeToggle: false so the view-type switcher appears only once — in the
workspace toolbar, not duplicated in the viewer's own header.
Returns either the default Metadata provider or the one specified in the Provider property, if it was specified
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
The composite-key string of the record to highlight in the inner viewer. When a host owns record selection (e.g. via a detail panel) it binds this; the workspace's selectedRecordId field tracks it.
The currently-selected view. Hosts that own persistence (when AutoSaveView is false)
feed the loaded view back in here after handling a save/select request. Bound two-way friendly:
the workspace emits SelectedViewChange whenever the selection changes internally.
Export the current view's records via the inner viewer's active renderer. Returns false when the viewer isn't mounted or the active view type doesn't support export. The grid renderer downloads the file itself.
Optionalformat: "csv" | "excel" | "json"Live pagination/sort snapshot from the inner viewer, or null when not mounted.
Navigate to a 1-based page on the inner grid. Returns the page applied, or null.
Advance the inner grid to the next page. Returns the new 1-based page, or null.
Initializes the workspace and loads the per-user default grid state for the entity.
Close the config panel and clear any pending new-view carry-over state.
Close the filter dialog.
Handle the selector's "configure view" request — open the config panel.
Handle the selector's "create new record" request — emit for the host.
Handle a plug-in renderer's request (via the inner viewer) to create a new record of the current entity (e.g. a grid's "New" button) — re-emit for the host to open the form.
Track loaded records so the config panel has sample data, and re-emit the full event.
Handle a delete from the config panel. When AutoSaveView, persists the delete itself (firing cancelable BeforeViewDelete / notification AfterViewDelete); otherwise emits DeleteViewRequested. (Generalized from DataExplorer.onDeleteView.)
Handle the duplicate dialog cancel.
Handle the duplicate dialog confirmation. When AutoSaveView, loads the source view, copies its config into a new personal view, and persists it; otherwise emits DuplicateViewRequested. (Generalized from DataExplorer.onDuplicateConfirmed.)
Handle duplicate triggered from the config panel — duplicate the selected view.
Handle a duplicate request (F-005). Opens the duplicate dialog so the user names the copy. (Generalized from DataExplorer.onDuplicateView.)
OptionalviewId: stringApply a filter from the dialog — the config panel picks it up via externalFilterState.
Re-emit the inner viewer's filtered-count change for the host.
Handle filter text change from the viewer — re-emit so the host can sync its filter box / URL.
Open the full-width filter dialog from the config panel's request.
Handle the selector's "open in tab" request — emit for the host to route.
Handle a plug-in renderer's request (via the inner viewer) to open a related record on a (possibly different) entity — re-emit for the host to route.
Handle the quick-save dialog's save. Intercepts updates to a shared view with the shared-view warning; otherwise executes the save. (Generalized from DataExplorer.onQuickSave.)
Handle the quick-save dialog close.
Handle "open advanced" from the quick-save dialog — carry data into the config panel.
Handle a quick-save request from the selector (F-001). Builds a summary from the config panel and opens the quick-save dialog. (Generalized from DataExplorer.onQuickSaveRequested.)
Handle a record open (double-click) — emit for the host to route to the record.
Handle a record single-click — track selection and re-emit for the host.
Handle a revert request (F-007). Re-parses the saved view's grid state, clears the modified flag, and reloads. (Generalized from DataExplorer.onRevertView.)
Handle saving per-user default view settings from the config panel. When AutoSaveView,
persists to UserInfoEngine; otherwise emits SaveDefaultsRequested.
(Generalized from DataExplorer.onSaveDefaultViewSettings.)
Handle a save from the config panel. When AutoSaveView, persists the view itself (create-new or update) via the BaseEntity; otherwise emits SaveViewRequested for the host. (Faithful generalization of DataExplorer.onSaveView, minus routing/state-service/notifications.)
Handle the selector's "save view" request — open the config panel in the requested mode.
Handle the shared-view warning action (update / save-as-copy / cancel).
Handle the shared-view warning cancel.
Drive the inner entity-viewer to switch to the chosen view type. The toolbar-level ViewTypeSwitcherComponent emits the selection; we route it to the viewer's EntityViewerComponent.SelectViewTypeById (its existing lifecycle: cancelable events
Handle a view selection from the selector dropdown. Applies the view's grid state and filter, resets the modified flag, and notifies the host. (Generalized from DataExplorer.onViewSelected.)
Move the inner grid to the previous page. Returns the new 1-based page, or null.
Programmatically select a record in the inner grid — highlights the row and emits RecordSelected for the host (the no-UI equivalent of a user row-click). Returns false when the viewer isn't mounted or has no entity context. The record must be one of the loaded rows; the host resolves it (e.g. from loadedRecords).
Set the inner grid's server-side page size (reloads from page 1). Returns the size applied, or null.
Apply a server-side sort to the inner grid. Returns true when applied, false otherwise.
mj-view-workspace— the reusable "browse an entity's data across saved views" workspace.This composite component orchestrates the full saved-view lifecycle (select / save / save-as-new / rename / duplicate / delete / revert / quick-save / save-defaults) on top of an entity's data, by composing the existing Generic lego components in this package:
mj-view-type-switcher— the toolbar dropdown for switching the active view type.mj-quick-save-dialog,mj-duplicate-view-dialog,mj-shared-view-warning-dialog,mj-ev-confirm-dialog— the focused modals.It is the generic extraction of what
DataExplorerDashboardComponentdoes today, minus routing, URL/query-param sync, and the Explorer state service. Anything that requires app-level routing is emitted as an event (OpenRecordRequested, OpenViewInTabRequested, CreateNewRecordRequested) for the host to handle — this component never importsRouter.Persistence model
true, the workspace persists view CRUD itself via theMJUserViewEntityExtendedBaseEntity (.Save()/.Delete()) andUserInfoEnginefor the per-user default-view settings, firing the cancelableBefore…events and notificationAfter…events around each operation.false(the default), the workspace performs no persistence — it emits the change-request events (SaveViewRequested, DeleteViewRequested, DuplicateViewRequested, etc.) and the host is responsible for persisting and feeding back the updated view via the[SelectedView]input.State is held in plain component fields — there is no state-management service.
Example