# @memberjunction/ng-data-context
Angular components for managing MemberJunction Data Contexts -- reusable collections of data sources (views, queries, raw SQL) that can be composed and referenced by reports, dashboards, and AI prompts.
## Overview
The `@memberjunction/ng-data-context` package provides an interactive component for creating, editing, and previewing data contexts. A data context defines one or more data source items (entity views, stored queries, or raw SQL statements) along with optional filters, and packages them into a named, reusable unit. The package includes both an inline component and a dialog wrapper.
```mermaid
graph TD
A[DataContextModule] --> B[DataContextComponent]
A --> C[DataContextDialogComponent]
B --> D["Data Source Items"]
D --> D1["Entity Views"]
D --> D2["Stored Queries"]
D --> D3["Raw SQL"]
D --> D4["Entity Records"]
B --> E["Item Configuration"]
E --> E1["Filters"]
E --> E2["Preview"]
E --> E3["Virtual Scrolling"]
C --> B
style A fill:#2d6a9f,stroke:#1a4971,color:#fff
style B fill:#7c5295,stroke:#563a6b,color:#fff
style C fill:#2d8659,stroke:#1a5c3a,color:#fff
style D fill:#b8762f,stroke:#8a5722,color:#fff
```
## Installation
```bash
npm install @memberjunction/ng-data-context
```
## Usage
### Import the Module
```typescript
import { DataContextModule } from '@memberjunction/ng-data-context';
@NgModule({
imports: [DataContextModule]
})
export class YourModule { }
```
### Inline Component
```html
```
### Dialog Component
```html
```
### Complete Example
```typescript
import { Component } from '@angular/core';
import { IMetadataProvider, Metadata } from '@memberjunction/core';
@Component({
selector: 'app-data-context-viewer',
template: `
@if (isDialogVisible) {
}
`
})
export class DataContextViewerComponent {
isDialogVisible = false;
selectedDataContextId = '12345-67890-abcdef';
metadataProvider: IMetadataProvider;
constructor() {
this.metadataProvider = Metadata.Provider;
}
showDialog(): void {
this.isDialogVisible = true;
}
onDialogClose(): void {
this.isDialogVisible = false;
}
}
```
## API Reference
### DataContextComponent (`mj-data-context`)
Main component for displaying a data context and its items.
#### Inputs
| Input | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| `dataContextId` | `string` | Yes | - | The ID of the data context to display |
| `Provider` | `IMetadataProvider \| null` | No | `Metadata.Provider` | Custom metadata provider |
### DataContextDialogComponent (`mj-data-context-dialog`)
Dialog wrapper displaying the DataContextComponent in a Kendo dialog.
#### Inputs
| Input | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| `dataContextId` | `string` | Yes | - | The ID of the data context to display |
| `Provider` | `IMetadataProvider \| null` | No | `null` | Custom metadata provider |
#### Outputs
| Output | Type | Description |
|--------|------|-------------|
| `dialogClosed` | `EventEmitter` | Emitted when the dialog is closed |
## Data Context Structure
A data context in MemberJunction consists of:
1. **Context Record** (`DataContextEntity`) -- ID, Name, Description, and metadata
2. **Context Items** (`Data Context Items` entity) with the following types:
- `SQL` -- Direct SQL query
- `View` -- Reference to a saved view
- `Query` -- Reference to a stored query
- `Entity` -- Reference to an entity
- `Record` -- Specific record reference
## Features
- **Multi-source composition**: Combine entity views, stored queries, raw SQL, and specific records into a single named context
- **Virtual scrolling**: Efficient handling of large datasets via Kendo Grid
- **Column sorting and resizing**: Interactive grid features
- **Metadata integration**: Uses MemberJunction's metadata system for entity loading
- **Loading state management**: Built-in loading indicators
- **Custom provider support**: Works with custom metadata providers for multi-tenant scenarios
- **Error handling**: Logs errors via MemberJunction's `LogError` function
## Dependencies
### Runtime Dependencies
| Package | Description |
|---------|-------------|
| `@memberjunction/core` | Core MemberJunction framework |
| `@memberjunction/core-entities` | Entity type definitions |
| `@memberjunction/global` | Global utilities |
| `@memberjunction/ng-container-directives` | Container directives |
| `@memberjunction/ng-shared` | Shared Angular utilities |
| `@progress/kendo-angular-grid` | Grid with virtual scrolling |
| `@progress/kendo-angular-indicators` | Loading indicators |
| `@progress/kendo-angular-dialog` | Dialog component |
| `@progress/kendo-angular-buttons` | Button components |
### Peer Dependencies
- `@angular/common` ^21.x
- `@angular/core` ^21.x
## Build
```bash
cd packages/Angular/Generic/data-context
npm run build
```
## License
ISC