Member Junction
    Preparing search index...

    The Grid view type renderer — a fully self-contained IViewRenderer adapter that hosts the existing EntityDataGridComponent (<mj-entity-data-grid>) inside the entity-viewer's pluggable view-type system. It is the dynamic-mounted plug-in that the GridViewType descriptor points at.

    Architectural intent — the container knows nothing about grids, and grid features never bubble up. The host (entity-viewer) binds only the generic IViewRenderer surface: the core inputs (entity / provider / records / selectedRecordId / filterText / config), the generic data-context inputs (totalRecordCount / page / pageSize / isLoading), and a small set of generic outputs. There is no opaque hostAction channel — everything a grid does is resolved through one of these three categories:

    1. Self-contained (owned end-to-end — never bubbles up):

      • Export → owned entirely by <mj-entity-data-grid> itself (its onExportClick opens its OWN export dialog with format/sampling via ExportService). This wrapper does NOT host an export dialog — doing so produced two stacked dialogs.
      • Add to List → hosts <mj-list-management-dialog> (ListManagementModule). On (AddToListRequested) the wrapper builds a ListManagementDialogConfig from the entity + selected records and opens the dialog.
      • Delete → hosts the Generic <mj-ev-confirm-dialog> (from EntityViewerModule). On (DeleteButtonClick) the wrapper confirms, deletes via the MJ entity layer, then re-requests data so the host reloads the current page.
      • Refresh → on (RefreshButtonClick) the wrapper re-emits dataRequest so the host reloads. No feature event leaves the wrapper.
      • Selection → kept INTERNAL; it only drives the wrapper's own add-to-list. Never bubbles.
    2. Navigation (the ONLY legitimate upward signals — routing lives in the outer app):

    3. Container ↔ plug-in generic coordination (NOT outer-app signals):

    Seeding the grid from config with defaults: absent config fields fall back to sensible defaults so a brand-new view (config === {}) renders a fully-functional grid — toolbar on, checkbox selection, add-to-list on, pager on. The grid never loads its own data ([AllowLoad]="false") — the host owns the fetch.

    This is an NgModule-declared (standalone: false) component, declared in EntityViewerModule. It renders <mj-entity-data-grid> + the Generic <mj-list-management-dialog> / <mj-ev-confirm-dialog> straight from the module's compilation scope (the module imports ListManagementModule and declares the grid + confirm dialog; the grid component brings its own export dialog) — so there's no imports array and, crucially, no self-import of EntityViewerModule: the module loads the view-type descriptors, which reference these wrappers, so a wrapper importing the module back would form a runtime import cycle (NG0919).

    Inputs use the camelCase names mandated by the IViewRenderer contract (the host binds them by those exact names via setInput), rather than MJ's usual PascalCase for public members — mirroring the Cards and Cluster renderers.

    Hierarchy (View Summary)

    Implements

    Index

    Constructors

    Properties

    AutoLoadEntityActions: boolean = true

    When true (default), the grid self-loads the entity's active EntityActions and shows them — buttons appear only for entities that actually have actions (data-driven). Actions whose invocation names a RuntimeUXDriverClass mount that interactive driver (e.g. the Record Process runner) in-place.

    config: GridViewConfig = {}

    Opaque per-view configuration. Seeds the grid bindings; mutated + re-emitted on grid changes.

    configChanged: EventEmitter<GridViewConfig> = ...

    Emitted when this renderer mutates its opaque config (sort / grid-state persistence).

    configureRequested: EventEmitter<void> = ...

    Ask the host to open this view's configuration UI. Raised when the grid emits ManageColumnsRequested (its "Manage Columns" toolbar affordance). Part of the generic IViewRenderer contract; the container forwards it to the workspace, which opens the config panel (Columns tab) — the canonical column editor.

    createRecordRequested: EventEmitter<void> = ...

    NAVIGATION: create a new record of the current entity (grid "New" button). Bubbles up for routing.

    dataRequest: EventEmitter<ViewDataRequest> = ...

    Generic data-access channel: ask the host to re-load with different sort / page.

    deleteConfirmMessage: string = 'Are you sure you want to delete the selected records?'

    Dynamic message for the delete-confirmation dialog (reflects the staged record count).

    entity: EntityInfo | null = null

    The entity whose records are being rendered. Used to build default params + resolve selection.

    filterText: string | null = null

    Active filter text — passed through for the grid's cell highlighting.

    Reference to the hosted grid. Currently only retained for parity / future selection resolution; selection is mapped from the records input rather than read from the grid, per contract.

    isLoading?: boolean

    Whether the host is currently (re)loading the record set. Accepted per contract; unused here.

    listManagementConfig: ListManagementDialogConfig | null = null

    Config fed into <mj-list-management-dialog>. Built from the entity + selected records.

    openRelatedRecordRequested: EventEmitter<ViewRelatedRecordNavigation> = ...

    NAVIGATION: open a related record on a (possibly different) entity from a foreign-key cell click. Routing lives in the outer app, so this is one of the few signals that legitimately bubbles up.

    page?: number

    One-based current page the host is showing. Fed into [PagerPageNumber] (already 1-based).

    pageSize?: number

    Page size the host is using — fallback when config.pageSize is absent.

    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.

    recordOpened: EventEmitter<unknown> = ...

    Emitted when a row is double-clicked — payload is the raw record object (host builds the key).

    records: Record<string, unknown>[] = []

    The records to render (already loaded / filtered / paged by the host). Fed into [Data].

    recordSelected: EventEmitter<unknown> = ...

    Emitted when a row is single-clicked — payload is the raw record object (host builds the key).

    selectedRecordId: string | null = null

    Primary-key string of the currently selected record, if any.

    showDeleteConfirm: boolean = false

    Whether the delete-confirmation dialog is visible. Toggled internally by onDeleteButtonClick.

    showListManagementDialog: boolean = false

    Whether the add-to-list dialog is visible. Toggled internally by onAddToListRequested.

    totalRecordCount?: number

    Total record count across all pages, for the grid's pager. Fed into [TotalRowCount].

    "ɵdir": unknown
    "ɵfac": unknown

    Accessors

    • get ProviderToUse(): IMetadataProvider

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

      Returns IMetadataProvider

    • 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

    • Add-to-list button → build a ListManagementDialogConfig from the entity + the records the grid supplied, then open the Generic list-management dialog. The dialog persists membership changes itself — nothing bubbles up. Mirrors the config construction the legacy host did in data-explorer-dashboard's onAddToListRequested().

      Parameters

      • event: {
            entityInfo: EntityInfo;
            recordIds: string[];
            records: Record<string, unknown>[];
        }

      Returns void