Member Junction
    Preparing search index...

    Home Dashboard - Personalized home screen showing all available applications with quick access navigation and configuration options.

    Uses OnPush change detection and cached computed values for optimal performance. Registered as a BaseResourceComponent so it can be used as a Custom resource type in nav items, allowing users to return to the Home dashboard after viewing orphan resources.

    Hierarchy (View Summary)

    Implements

    • AfterViewInit
    • OnDestroy
    Index

    Constructors

    Properties

    Accessors

    Methods

    CloseAddPinPanel DismissPinEmptyState FilterApps FilterPanelItems formatDate getEntityIconByName GetEntityIconByName getFavoriteDisplayName GetFavoriteDisplayName GetInputValue GetPinAccentColor GetPinIcon GetPinsInGroup GetQueryParams GetResourceDisplayName GetResourceIconClass GetResourceTypeLabel getTabId GoHome HidePinMenu IsEditing ManagePins ngAfterViewInit ngOnDestroy ngOnInit NotifyCloseRequested NotifyDisplayNameChanged NotifyEditModeChanged NotifyLoadComplete NotifyLoadStarted OnActionConfigResult OnActionRunnerResult onAppClick OnAppClick onConfigSaved OnConfigSaved OnDashboardEditingChange OnDashboardNavigationRequested OnDashboardSaved OnDashboardViewLoaded OnDashboardViewLoadFailed OnDragEnd OnDragLeave OnDragOver OnDragStart OnDrop onFavoriteClick OnFavoriteClick OnNewDashboardCancelled OnNewDashboardNamed onNotificationClick OnNotificationClick OnPanelSectionExpandedChange OnPinClick OnPinMenuEdit OnPinMenuKeydown OnPinMenuMoveToGroup OnPinMenuUnpin OnPinNameEnter OnPinnedExpandedChange OnQueryParamsChanged onRecentClick OnRecentClick OnSwitcherPick onTabIdRebound OpenActionPinConfig OpenAddPinPanel openConfigDialog OpenConfigDialog OpenDashboardInDashboardsApp OpenDashboardInHome OpenNewDashboardDialog PinAppNavItem PinFromPanel PinName RebindTabId RefreshView rehomeChildToTab RemoveGroup RemovePin ResourceRecordSaved SaveGroupName SavePinName ShowPinMenu StartEditingGroup StartEditingPin ToggleEditMode toggleSidebar ToggleSidebar trackByApp TrackByApp trackByFavorite TrackByFavorite trackByGroup TrackByGroup trackByNavItem TrackByNavItem trackByNotification TrackByNotification trackByPin TrackByPin trackByRecent TrackByRecent UpdateQueryParams

    Constructors

    Properties

    ActionConfigActionDescription: string | null = null
    ActionConfigActionId: string | null = null
    ActionConfigActionName: string | null = null
    ActionConfigDialogVisible: boolean = false
    ActionRunnerDialogVisible: boolean = false
    ActionRunnerPin: HomeAppPinnedItem | null = null
    AddPanelLoading: boolean = false
    AddPanelNewGroupName: string = ''
    AddPanelOpen: boolean = false
    AddPanelSearchQuery: string = ''
    AddPanelSelectedGroup: string = ''
    AppConfigDialog: UserAppConfigComponent
    Apps: BaseApplication[] = []
    AppsDisplayData: AppDisplayData[] = []
    AvailableActions: {
        description: string;
        id: string;
        name: string;
        pinned: boolean;
    }[] = []
    AvailableApps: {
        appId: string;
        appName: string;
        color: string;
        icon: string;
        navItems: { icon: string; label: string; pinned: boolean }[];
    }[] = []
    AvailableDashboards: { id: string; name: string; pinned: boolean }[] = []
    AvailableQueries: { id: string; name: string; pinned: boolean }[] = []
    AvailableViews: {
        entityName: string;
        id: string;
        name: string;
        pinned: boolean;
    }[] = []
    CurrentDashboard: MJDashboardEntity | null = null

    The dashboard Home shows in place of its overview, or null on the overview.

    CurrentDashboardId: string | null = null

    ID of that dashboard, or null.

    CurrentUser: { Email: string; FirstName?: string; Name: string } | null = null
    DashboardStartsInEditMode: boolean = false

    True when the dashboard view opens in edit mode. The editor reads it once, then sets it back to false.

    destroy$: Subject<void> = ...
    DraggingPinId: string | null = null
    DragOverPinId: string | null = null
    EditingGroupName: string | null = null
    EditingPinId: string | null = null
    EditMode: boolean = false
    FavoriteDisplayNames: Map<string, string> = ...
    Favorites: MJUserFavoriteEntity[] = []
    FavoritesLoading: boolean = true
    HasDataExplorerApp: boolean = false
    HidePinEmptyState: boolean = false
    IsCreatingDashboard: boolean = false

    True while the named dashboard is being created.

    IsDashboardEditing: boolean = false

    True while the dashboard Home shows is in edit mode.

    isLoading: boolean = true

    True until Home's first load finishes; the page shows its loading view meanwhile. A later app-list reload does not set it.

    navigationService: NavigationService
    NewDashboardNameMaxLength: number = DASHBOARD_NAME_MAX_LENGTH

    The longest name the dialog accepts.

    NotificationsLoading: boolean = true
    PanelSectionCollapsed: Record<string, boolean> = {}
    ParentTabId: string | null

    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.

    PinGroups: string[] = []
    PinMenuGroupLabelId: string = ...

    Id of the menu's "Move to Group" header, which names the group rows.

    PinMenuMaxHeight: number | null = null

    The pin menu's max height in pixels: the room on its side of the button. Null while the menu is measured.

    PinMenuPin: HomeAppPinnedItem | null = null
    PinMenuVisible: boolean = false
    PinMenuX: number = 0
    PinMenuY: number = 0
    PinnedDashboards: HomeSwitcherDashboard[] = []

    The pinned Config dashboards, in pin order, for the Dashboards switcher.

    PinnedExpanded: boolean = true

    Whether the Pinned section is open. Saved for each user in the HomeApp.PinnedCollapsed setting.

    PinnedItems: HomeAppPinnedItem[] = []
    PinSections: HomePinSection[] = []

    The pin grid's runs: ungrouped pins first, then each group in group order.

    Provider: IMetadataProvider | null

    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.

    RecentItems: RecentAccessItem[] = []
    RecentsLoading: boolean = true
    ShowConfigDialog: boolean = false
    ShowNewDashboardDialog: boolean = false

    True while the New dashboard name dialog is open.

    SidebarOpen: boolean = false
    UngroupedPins: HomeAppPinnedItem[] = []
    UnreadNotifications: MJUserNotificationEntity[] = []
    "ɵdir": unknown
    "ɵfac": ɵɵFactoryDeclaration<BaseResourceComponent, never>

    Accessors

    • get DisplayNameChangedEvent(): ((newName: string) => void) | null

      Returns ((newName: string) => void) | null

    • set DisplayNameChangedEvent(value: ((newName: string) => void) | null): void

      Parameters

      • value: ((newName: string) => void) | null

      Returns void

    • get LoadComplete(): boolean

      Returns boolean

    • get LoadStarted(): boolean

      Returns boolean

    • get LoadStartedEvent(): any

      Returns any

    • set LoadStartedEvent(value: any): void

      Parameters

      • value: any

      Returns void

    • get ProviderToUse(): IMetadataProvider

      Returns either the default Metadata provider or the one specified in the Provider property, if it was specified

      Returns IMetadataProvider

    • get ResourceCloseRequestedEvent(): (() => void) | null

      Returns (() => void) | null

    • set ResourceCloseRequestedEvent(value: (() => void) | null): void

      Parameters

      • value: (() => void) | null

      Returns void

    • get ResourceEditModeChangedEvent(): ((editing: boolean) => void) | null

      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 ((editing: boolean) => void) | null

    • set ResourceEditModeChangedEvent(
          value: ((editing: boolean) => void) | null,
      ): void

      Parameters

      • value: ((editing: boolean) => void) | null

      Returns void

    • get ResourceRecordSavedEvent(): any

      Returns any

    • set ResourceRecordSavedEvent(value: any): void

      Parameters

      • value: any

      Returns void

    • get RunQueryToUse(): IRunQueryProvider

      Returns either the default RunQuery provider or the one specified in the Provider property, if it was specified

      Returns IRunQueryProvider

    • get RunViewToUse(): IRunViewProvider

      Returns either the default RunView provider or the one specified in the Provider property, if it was specified

      Returns IRunViewProvider

    Methods

    • Filter apps by search query (matches app name or nav item labels)

      Returns {
          appId: string;
          appName: string;
          color: string;
          icon: string;
          navItems: { icon: string; label: string; pinned: boolean }[];
      }[]

    • Read current query params from tab configuration. Use in initDashboard() / ngOnInit() to get initial URL state.

      Returns Record<string, string>

    • Get this component's tab ID. Checks ParentTabId input first (set by resource wrappers for child dashboards), then falls back to Data.Configuration.tabId.

      Returns string

    • 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.

      Returns Promise<void>

    • 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.

      Returns void

    • Ask 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.

      Returns void

    • Call 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.

      Parameters

      • newName: string

      Returns void

    • Tell the host shell the hosted form's edit mode changed. Subclasses that host an editable form call this from the form's EditModeChanged output.

      Parameters

      • editing: boolean

      Returns void

    • The editor entered or left edit mode. The editor can report leaving it while Home renders (it drops an edit when it gets another dashboard), so this sets no state the template reads, and tells the agent after the render.

      Parameters

      • editing: boolean

      Returns void

    • The editor could not show the dashboard: Home returns to its overview and tells the user. A dashboard that a URL change named stays in the URL, since a write would add a history entry that every later Back lands on again. Any other dashboard is removed from the URL: one the user opened in Home, or the one Home opened with on its first load, so the tab does not keep it.

      Returns void

    • Creates the named dashboard, pins it to Home and shows it in Home in edit mode. When the save fails, the dialog stays open with the name and the user is told. A second Create while one runs is ignored.

      Parameters

      • name: string

      Returns Promise<void>

    • Set a section's collapsed state in the Add Pin panel from the accordion panel's (ExpandedChange) output. The accordion reports the EXPANDED state, which is the inverse of our stored COLLAPSED flag. OnPush component, so mark for check after mutating the map.

      Parameters

      • section: string
      • expanded: boolean

      Returns void

    • Edit in a pin's menu: closes the menu, puts the pins in edit mode (opening a collapsed Pinned section) and starts renaming the pin, with focus in its rename box. For a dashboard pin the user cannot rename, it says why and moves focus to Done instead.

      Returns void

    • Keys in the pin options menu: ArrowDown, ArrowUp, Home and End move between the rows. Escape closes the menu and puts focus back on its button. Tab closes it too, and the browser moves focus on from the button.

      Parameters

      • event: KeyboardEvent

      Returns void

    • Hook 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.

      Parameters

      • _tabId: string

      Returns void

    • Open the Configure Action Pin dialog — triggered when the user clicks an Action in the Add Pin panel. Actions need extra configuration (preset params, runtime params, title, theming) before they can be pinned.

      Parameters

      • actionId: string
      • actionName: string
      • description: string

      Returns void

    • Shows a dashboard inside Home in place of the overview and writes it to the URL (?dashboard=). Only a Config dashboard the user can open shows in Home. Asks first when the open dashboard has unsaved changes. Returns false when the dashboard did not open.

      Parameters

      • dashboardId: string
      • startInEditMode: boolean = false

      Returns Promise<boolean>

    • Pin an app nav item from the Add Panel

      Parameters

      • appName: string
      • _appIcon: string
      • appColor: string
      • navItemLabel: string
      • navItemIcon: string

      Returns void

    • Re-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.

      Parameters

      • tabId: string

      Returns void

    • Marks 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.

      Returns void

    • Re-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.

      Parameters

      Returns void

    • Saves the name typed in a pin's rename box and closes the box. A dashboard pin renames its dashboard, since it shows the dashboard's name; other pins rename only the pin. An empty or unchanged name changes nothing. A call after the rename has ended does nothing: the browser can blur the box as it goes away.

      Parameters

      • pinId: string
      • newName: string

      Returns void

    • Starts renaming a pin: shows its rename box, with focus in it and the name selected. A dashboard pin is renamed only by a user who can edit its dashboard; other users are told why not.

      Parameters

      • pinId: string
      • event: Event

      Returns void

    • Push 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.

      Parameters

      • params: Record<string, string | null>

      Returns void