Member Junction
    Preparing search index...

    Main shell component for the new Explorer UX.

    Provides:

    • App-centric header with app switcher and nav items
    • Golden Layout-based tab container
    • Unified workspace state management

    Hierarchy (View Summary)

    Implements

    • OnInit
    • OnDestroy
    • AfterViewInit
    Index

    Constructors

    Properties

    Accessors

    Methods

    Constructors

    Properties

    activeApp: BaseApplication | null = null
    activityItems: ActivityItem[] = []
    activityOpen: boolean = false
    activityRunningCount: number = 0
    appAccessDialog: AppAccessDialogComponent
    currentLoadingAnimation: "pulse" | "spin" | "bounce" | "pulse-spin" = 'pulse'
    currentLoadingColor: string
    currentLoadingGradient: LogoGradient | null
    currentLoadingText: string
    currentLoadingTextColor: string
    developerModeService: DeveloperModeService
    initialized: boolean = false
    isSearchOpen: boolean = false
    isViewingSystemTab: boolean = false
    leftOfSwitcherApps: BaseApplication[] = []

    Nav Bar apps positioned to the left of the app switcher. Backing field recomputed only when the active app or nav-app list changes (see recomputeNavBarApps) — NOT on every change-detection cycle, since this is bound directly in the shell nav template's @for/@if. Filters out apps that have HideNavBarIconWhenActive=true and are currently active.

    leftOfUserMenuApps: BaseApplication[] = []

    Nav Bar apps positioned to the left of the user menu. Backing field recomputed only when the active app or nav-app list changes (see recomputeNavBarApps). Filters out apps that have HideNavBarIconWhenActive=true and are currently active.

    LegacySearchOpen: boolean = false
    loading: boolean = true
    loadingAppId: string | null = null
    MJVersion: string = PACKAGE_VERSION

    MemberJunction framework version, shown in the loading screen and About dialog.

    mobileNavDrawer?: ElementRef<HTMLElement>

    Mobile drawer + its toggle — used to return focus to the toggle when the drawer closes.

    mobileNavOpen: boolean = false
    mobileNavToggle?: ElementRef<HTMLButtonElement>
    omnibarPalette?: { Open(initialQuery?: string): void }
    OmnibarPromoText: "Try the new command palette — search, jump to records, switch apps, and message agents from one box." = 'Try the new command palette — search, jump to records, switch apps, and message agents from one box.'

    Promo copy shown in the legacy search surfaces.

    PinProgressText: string = ''
    PinProgressVisible: boolean = false
    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.

    searchableEntities: EntityInfo[] = []
    searchInput: ElementRef<HTMLInputElement>
    selectedEntity: EntityInfo | null = null
    shellSearchComposite:
        | {
            MinRelevancePercent?: number;
            SelectedScopeIDs?: string[];
            Focus?(): void;
        }
        | undefined

    Legacy inline search composite (omnibar-off desktop). Structural typing keeps the shell decoupled from the ng-search component class.

    ShowResetOption: boolean = false
    tabBarVisible: boolean = true
    tabContainerRef: TabContainerComponent
    unreadNotificationCount: number = 0
    userEmail: string = ''
    userIconClass: string | null = null
    userImageURL: string = ''
    userMenuElements: UserMenuElement[] = []
    userMenuVisible: boolean = false
    userName: string = ''
    "ɵdir": unknown
    "ɵfac": ɵɵFactoryDeclaration<BaseAngularComponent, never>

    Accessors

    • get appSwitchingLocked(): boolean

      True when the auth session is locked to a single application (e.g. a magic-link session). The header hides app-switching chrome so the external user stays within their scoped app. Data access is still enforced server-side by the user's role; this is the UI-confinement layer.

      Returns boolean

    • get avatarAriaLabel(): string

      Accessible name for the avatar button. The name must never depend on the avatar image rendering — a Gravatar CORS failure drops to the icon fallback, and an icon carries no name of its own — so it is set on the BUTTON and falls back to a generic label before the user record has loaded.

      Returns string

    • get ProviderToUse(): IMetadataProvider

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

      Returns IMetadataProvider

    • get RecordTabsStyle(): boolean

      True when the deployment uses the records-as-tabs record-open style (Shell.RecordOpen.Style != 'classic'): records open as native Golden Layout tabs in the app the user is standing in, and the Records pill in the nav is the global entry point (count + resume-last-viewed). The GL tab header is the tab UI — native close/drag/pin apply to records too.

      Returns boolean

    • 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

    • get ShowOmnibarPromo(): boolean

      Whether the legacy search surfaces advertise the omnibar: the instance makes it available, the user hasn't opted in yet, and they haven't dismissed the promo. Fail-closed (never advertise during boot / permission constraints).

      Returns boolean

    • get UseOmnibar(): boolean

      Two-layer gate for the unified Ctrl+K command palette (omnibar): the 'Shell.Omnibar.Enabled' Instance Config row is the master AVAILABILITY switch (default TRUE; false = legacy trio for everyone), and each user opts in personally via My Profile → Command Palette (a UserInfoEngine setting, so the choice follows them across devices). ON = the header shows the palette affordance and Ctrl+K / Ctrl+/ open the palette; OFF = the legacy trio (search composite + app command palette + search popup) behaves exactly as before. Both reads are synchronous cache hits.

      Returns boolean

    Methods

    • 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 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 Promise<void>

    • Header search affordance / Ctrl+K: route to whichever search surface applies. The mobile check matters: below the breakpoint the composite is CSS-hidden (.desktop-only) but its ViewChild still exists — focusing an invisible input would silently eat the interaction.

      Returns void

    • Promo accepted: opt the user in (same UserInfoEngine setting as the My Profile toggle, so it follows them across devices), then open the palette pre-seeded with whatever they were just searching — same query, new surface, immediate demonstration.

      Parameters

      • query: string

      Returns void

    • Legacy search overlay selection → same navigation path as the old composite.

      Parameters

      • event: {
            Result: {
                EntityName: string;
                RawMetadata?: string;
                RecordID: string;
                ResultType?: string;
            };
        }

      Returns void

    • Parameters

      • result: {
            EntityName: string;
            RawMetadata?: string;
            RecordID: string;
            ResultType?: string;
        }

      Returns void

    • Nuclear recovery: reset server-side workspace, clear all browser-side cached data, and reload the page. This recovers from stuck loading states caused by corrupted, stale, or incompatible workspace/tab data (e.g., after a version upgrade that changes the workspace configuration schema).

      Returns Promise<void>

    • Skip link target handoff (WCAG 2.4.1). Focus is moved programmatically rather than left to the browser's fragment navigation: the shell's main region is a Golden Layout host, and letting the URL hash change here would collide with the deep-link/tab restore path.

      Parameters

      • event: Event

      Returns void