Protecteddestroy$What an empty flat list shows at the current location.
IDs of the user's favorite dashboards, for the card stars.
True while the dashboard named in the New dashboard dialog is being created.
How many dashboards the browser shows for each Library filter.
The active Library filter. A category is only selected under all.
ProtectednavigationThe longest name the New dashboard dialog accepts.
Each dashboard's owner text ("You" or the owner's name), keyed by dashboard ID.
Tab ID for query param notification scoping. Set by resource wrappers that render child dashboards, so the child knows which tab it belongs to. If not set, falls back to Data.Configuration.tabId.
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.
Whether the rail is collapsed to icons. Saved per user.
Rail ids of the expanded category tree items.
The rail's Library and Categories sections.
True while the New dashboard dialog is open.
The dashboards given to the browser: the loaded list for the current location, in the Library order.
StaticɵdirStaticɵfacUse Categories.
Use Dashboards.
Use EffectiveCategoryMap.
True unless one category's folder is open: every other location is a flat list.
Returns either the default Metadata provider or the one specified in the Provider property, if it was specified
The rail item for the current Library filter or category.
Wired by the tab container. true means the hosted form just entered edit
mode; the shell PROMOTES (pins) a records preview tab on that edge so the
record is never replaced by the next plain open — VS Code's
promote-on-modify. false is informational; promotion is sticky.
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
Use SelectedCategoryId.
Use ViewMode.
ProtectedGetRead current query params from tab configuration. Use in initDashboard() / ngOnInit() to get initial URL state.
Get this component's tab ID. Checks ParentTabId input first (set by resource wrappers for child dashboards), then falls back to Data.Configuration.tabId.
True when this resource holds in-progress user edits that a silent replacement would destroy.
Since #4345 the PRIMARY protection is promotion: the shell pins a records
preview tab on the ResourceEditModeChangedEvent(true) edge. This read
remains as the fallback the pool predicate consults for resources that
report edit state without raising that event, so such a tab still leaves
the consumption pool while editing.
Default false: most resources are read-only surfaces with nothing to lose. Resources that host an editable form override it.
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.
ProtectedNotifyAsk the host shell to close/dismiss this resource (typically: close the tab). Called by subclasses that hosted a form that emitted a 'dismiss' navigation event — most often, a brand-new record where the user clicked Discard. The record was never saved, the form is empty, and leaving it open serves no purpose. The tab-container listens for this and closes the workspace tab.
ProtectedNotifyCall this to notify the tab system that the resource's display name has changed. The tab container will update the tab title and browser title accordingly.
ProtectedNotifyTell the host shell the hosted form's edit mode changed. Subclasses that host an editable form call this from the form's EditModeChanged output.
ProtectedNotifyProtectedNotifyHandle folder navigation in the generic browser and update the URL. Entering a folder shows it under the All Library filter; going back to the root shows the current Library filter's flat list.
Handle category create request from generic browser Includes extensive logging for debugging category creation issues
Handle category delete request from generic browser Performs recursive deletion of category and all children
The generic browser asks for a new dashboard (its New menu or an empty state): asks for the name first.
Handle dashboard delete request from generic browser
Handle dashboard edit request from generic browser: open it in edit mode.
Stars or unstars a dashboard from its card. Changed$ then re-sorts the Library.
Handle dashboard move request from generic browser. For owned dashboards: updates the dashboard's CategoryID directly. For shared dashboards: creates/updates a DashboardCategoryLink to organize without modifying the original.
Handle dashboard open request from generic browser: open the dashboard, in a separate tab for a Shift, Ctrl or Cmd click.
Closes the New dashboard dialog and creates nothing.
Creates the dashboard named in the dialog, reloads the cache the dashboard tab reads from, puts the dashboard first in the list, and opens it in edit mode in a tab of the Dashboards app. When the save fails, the dialog stays open with the name and the user is told. A second call while the dashboard is being created does nothing.
ProtectedOnReact to query-param changes from browser back/forward, deep links, and Home pin navigation. Driven by BaseResourceComponent's reactive tab-param stream, which reaches this component even when it's cached/detached — the path the old ActivatedRoute subscription could not reliably cover.
Collapses or expands the whole rail and saves the choice for the user.
Moves the Library to the Library filter, category or Uncategorized of the clicked rail item.
ProtectedonHook for a host that instantiates CHILD resource components: re-home them here.
A host stamps its children with its tab id when it creates them, which is a SNAPSHOT. A cache reattach moves the host to a different tab without recreating anything, so a child left holding the birth tab's id would go on reading and — worse — writing that tab's params from inside a tab it no longer belongs to. That is the same cross-tab corruption this class refuses elsewhere, just arriving by a slower route, so the stamp has to move when the host does.
Default is a no-op: a component with no children has nothing to re-home.
Handle view preference change from generic browser - persist
Opens the New dashboard dialog. The dashboard is filed in categoryId, else in the open
category folder, else in no category.
OptionalcategoryId: string | nullRe-home this component to a different tab (cache reattach across tab ids). Replaces the reactive param subscription with one bound to the new tab and resets the duplicate-delivery key so the new tab's CURRENT params apply as a fresh mount would — the replay-on-subscribe delivers them immediately.
ProtectedRefreshMarks this component's view (and its ancestors) as needing change detection and schedules a tick — the reliable way for a resource component to re-render after updating state from async work (RunView/RunQuery continuations, timers, websocket pushes, RxJS subscriptions).
WHY THIS EXISTS: the Explorer shell hosts resource components dynamically — createComponent()
ApplicationRef.attachView() — because tab content mounts into Golden Layout / cached DOM
containers, not into an Angular template. Since Angular 18's change-detection scheduler
rework (Explorer is on Angular 21), ApplicationRef.tick() only refreshes attached views
that are FLAGGED dirty; a root-level attached view whose component mutates plain fields from
an async continuation is never flagged, so the view silently never re-renders — even though
the component uses default (non-OnPush) change detection (issue #3106).The framework calls this automatically from NotifyLoadStarted() / NotifyLoadComplete(), so the standard load lifecycle re-renders without any subclass action. Call it yourself after any LATER async state change that must reach the DOM outside those signals.
ProtectedrehomeRe-homes a child this component created to tabId.
The ParentTabId stamp is cleared FIRST and deliberately: getTabId() prefers it over the
rebound id, so leaving the old stamp in place would make the child's own RebindTabId a
no-op — it early-returns when getTabId() already matches — and the child would keep
answering with the tab it was born in. Clearing it lets the rebind be the authority, and the
child re-delivers the NEW tab's current params exactly as a fresh mount would.
ProtectedResourceProtectedUpdatePush query param changes to the URL. Creates a browser history entry. Safe to call during OnQueryParamsChanged — auto-suppressed to prevent loops.
The write is ALWAYS scoped to this component's own tab. A component that cannot identify its tab does not write at all — see the guard below.
Library page of the Dashboards app. A left rail picks a Library filter (All, Mine, Shared with me, Favorites, Recently opened), a category or Uncategorized; the generic DashboardBrowserComponent lists the result. Every list is flat, favorites first, then the dashboards opened last, then the rest; a category opens as a folder. Cards show a star the user can toggle and the owner ("You" or the owner's name). A click opens the dashboard in a tab of the Dashboards app, in place of the preview tab, so Back returns to the Library. A Shift, Ctrl or Cmd click opens it in a separate tab. New dashboard asks for the name first, then opens the new dashboard in edit mode.