Member Junction
    Preparing search index...

    Base class for all MJ Explorer navigation components - a navigation component is any component that can be displayed from a route

    Hierarchy (View Summary)

    Implements

    • OnInit
    • OnDestroy
    • AfterViewInit
    Index

    Constructors

    Properties

    Accessors

    Methods

    CancelDelete ClearCredential ClearEditCredential CloseAddMapPanel CloseAutoMapPanel CloseCreateTablesPanel CloseDetailView CloseEditPanel CloseEntityMapEditor CloseNewEntityDialog CloseSchedulePanel CloseWizard ConfirmDelete CopyDDLToClipboard CycleSyncDirection DirectionBadgeClass DirectionLabel DirectionText FindAndAddNewTables FinishWizard GetCardTestResult GetCredentialHint GetEntityMapCount GetIconBrandColor GetIntegrationIcon GetMenuActionLabel GetQueryParams GetResourceDisplayName GetResourceIconClass GetSourceTypeLabel GetStatusBadge GetStatusBadgeClass getTabId IsConnectionActive IsDeleteConfirming IsMenuOpen IsSelectedIntegration IsStepActive IsStepCompleted IsSyncing IsTestingCard LoadData NextStep ngAfterViewInit ngOnDestroy ngOnInit NotifyCloseRequested NotifyDisplayNameChanged NotifyLoadComplete NotifyLoadStarted OnCredentialDialogClose OnDetailSearch OnEditCredentialDialogClose OnEntityMapClick OnEntityTreeSelection OnKeydown OnMenuAction OnQueryParamsChanged OnScheduleDeleted OnScheduleSaved OnToggleMapEnabled OpenCredentialDialog OpenEditCredentialDialog OpenEditPanel OpenNewEntityDialog OpenSchedulePanel OpenWizard PreviewDDL PreviousStep RefreshView ResourceRecordSaved RunAutoMap RunCreateTables RunSync RunSyncWithDirection SaveAddMap SaveEditChanges SelectEditCredential SelectExistingCredential SelectIntegration SelectIntegrationCard ShowDeleteConfirm ShowExistingCredentials TestExistingConnection TestNewConnection ToggleAddMapPanel ToggleAllCreateTablesObjects ToggleAutoMapPanel ToggleCreateTablesPanel ToggleMenu ToggleSyncMenu UpdateQueryParams

    Constructors

    Properties

    AddMapDirection: "Bidirectional" | "Pull" | "Push" = 'Pull'
    AddMapEntityID: string = ''
    AddMapSourceObjectName: string = ''
    AutoMapDirection: "Bidirectional" | "Pull" | "Push" = 'Pull'
    AutoMapResult:
        | {
            EntityMapsCreated: number;
            Errors: string[];
            FieldMapsCreated: number;
        }
        | null = null
    AutoMapSchemas: string[] = []
    AutoMapSelectedSchema: string = ''
    AvailableIntegrations: MJIntegrationEntity[] = []
    AvailableSourceObjects: { Label: string; Name: string }[] = []
    Companies: CompanyRow[] = []
    ConnectionDescription: string = ''
    ConnectionName: string = ''
    Connections: IntegrationSummary[] = []
    CreateTablesObjects: {
        AlreadyPersisted: boolean;
        ID?: string;
        IsCustom: boolean;
        Label: string;
        Name: string;
        Selected: boolean;
    }[] = []

    Type Declaration

    • AlreadyPersisted: boolean
    • OptionalID?: string

      IntegrationObject.ID when AlreadyPersisted; undefined for freshly-discovered objects.

    • IsCustom: boolean
    • Label: string
    • Name: string
    • Selected: boolean
    CreateTablesResult: { Message: string; Success: boolean } | null = null
    CreateTablesSchema: string = ''
    CreateTablesSearch: string = ''
    DDLCopied: boolean = false
    DDLPreview: string | null = null
    DDLPreviewWarnings: string[] = []
    DeleteConfirmID: string | null = null
    destroy$: Subject<void>
    DetailEntityMaps: EntityMapRow[] = []
    DetailFilteredMaps: EntityMapRow[] = []
    DetailSearchTerm: string = ''
    EditCredential: MJCredentialEntity | null = null
    EditCredentialID: string | null = null
    EditCredentials: MJCredentialEntity[] = []
    EditDescription: string = ''
    EditEntity: MJCompanyIntegrationEntity | null = null
    EditingSummary: IntegrationSummary | null = null
    EditIsActive: boolean = false
    EditName: string = ''
    EditorEntityMap: EntityMapRow | null = null
    EditPanelOpen: boolean = false
    EntityBranchConfig: TreeBranchConfig = ...
    EntityLeafConfig: TreeLeafConfig = ...
    EntityMapCounts: Map<string, number> = ...
    entityTreeDropdown: TreeDropdownComponent | undefined
    ExistingCredentials: MJCredentialEntity[] = []
    IsAutoMapping: boolean = false
    IsCreatingEntity: boolean = false
    IsCreatingTables: boolean = false
    IsDeleting: boolean = false
    IsDetailLoading: boolean = false
    IsEditLoading: boolean = false
    IsEditSaving: boolean = false
    IsGeneratingDDL: boolean = false
    IsLoading: boolean = true
    IsLoadingCreateTablesObjects: boolean = false
    IsLoadingCredentials: boolean = false
    IsLoadingSourceObjects: boolean = false
    IsSaving: boolean = false
    IsSavingAddMap: boolean = false
    IsTesting: boolean = false
    navigationService: NavigationService
    NewEntitySchema: string = ''
    NewEntityTable: string = ''
    OpenMenuID: string | null = null
    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.

    PreselectedCredentialTypeId: string | undefined
    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.

    SavedIntegrationID: string | null = null
    ScheduledJobID: string | null = null
    SearchQuery: string = ''
    SelectedCompanyID: string | null = null
    SelectedCredential: MJCredentialEntity | null = null
    SelectedCredentialID: string | null = null
    SelectedIntegration: MJIntegrationEntity | null = null
    SelectedSummary: IntegrationSummary | null = null
    ShowAddMapPanel: boolean = false
    ShowAutoMapPanel: boolean = false
    ShowCreateEntity: boolean = false
    ShowCreateTablesPanel: boolean = false
    ShowCredentialDialog: boolean = false
    ShowScheduleSlidePanel: boolean = false
    SyncingIntegrationID: string | null = null
    SyncMenuIntegrationID: string | null = null
    SyncResult: { Message: string; Success: boolean } | null = null
    TestCardResults: Map<string, { Message: string; Success: boolean }> = ...
    TestingCardID: string | null = null
    TestResult: { Message: string; ServerVersion?: string; Success: boolean } | null = null
    WizardOpen: boolean = false
    WizardStep: WizardStepType = 1
    WizardSteps: WizardStep[] = WIZARD_STEPS
    "ɵdir": unknown
    "ɵfac": unknown

    Accessors

    • get Data(): ResourceData

      Returns ResourceData

    • set Data(value: ResourceData): void

      Parameters

      Returns void

    • 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 FilteredCreateTablesObjects(): {
          AlreadyPersisted: boolean;
          ID?: string;
          IsCustom: boolean;
          Label: string;
          Name: string;
          Selected: boolean;
      }[]

      Search-only filter for the picker. Standard/Custom/Registered state shows up as badges — never hides anything — so Select All covers everything the user can see.

      Returns {
          AlreadyPersisted: boolean;
          ID?: string;
          IsCustom: boolean;
          Label: string;
          Name: string;
          Selected: boolean;
      }[]

    • get LoadComplete(): boolean

      Returns boolean

    • get LoadCompleteEvent(): any

      Returns any

    • set LoadCompleteEvent(value: any): void

      Parameters

      • value: any

      Returns void

    • 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 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 RunReportToUse(): IRunReportProvider

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

      Returns IRunReportProvider

    • get RunViewToUse(): IRunViewProvider

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

      Returns IRunViewProvider

    Methods

    • One-click "find new tables": discovers every source object the connector now exposes that has NO entity map yet, and provisions them all (table + entity map + field maps) in a single ApplyAllBatch — no manual picker. This is the "find custom tables" affordance: a layer on top of entity-map selection that surfaces whole new objects the source started exposing after setup (distinct from custom COLUMNS, which the post-sync promoter handles automatically).

      Low-overhead by design: the only cost beyond a normal create is ONE DiscoverObjects call to learn what's new; the apply itself is identical to provisioning known tables. A no-op when the source exposes nothing new.

      Returns Promise<void>

    • 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

    • 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

    • Called by the framework when query params change from an external source (browser back/forward, deep link navigation). Override in subclasses to react to query param changes.

      Parameters

      • params: Record<string, string>

        The new query params from the URL

      • source: "popstate" | "deeplink"

        'popstate' for back/forward, 'deeplink' for external URL entry

      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

    • Push query param changes to the URL. Creates a browser history entry. Safe to call during OnQueryParamsChanged — auto-suppressed to prevent loops.

      Parameters

      • params: Record<string, string | null>

      Returns void