# MemberJunction Explorer (MJExplorer)
The primary web-based user interface for the MemberJunction platform. Built with Angular 21, powered by ESBuild and Vite, and backed by a comprehensive library of MJ Angular packages for entity management, dashboards, reports, and AI interactions.
## Architecture
```mermaid
graph TD
subgraph "MJExplorer (This Package)"
A[AppModule] --> B[AppComponent]
A --> C[Generated Entities]
A --> D[Class Registration Manifests]
end
subgraph "Angular Packages"
E["ng-explorer-app
(Shell & Routing)"]
F["ng-explorer-core
(Entity Browser)"]
G["ng-base-forms
(Form Framework)"]
H["ng-core-entity-forms
(Generated Forms)"]
I["ng-dashboards
(Dashboard System)"]
J["ng-explorer-settings
(Settings)"]
K["ng-auth-services
(Auth)"]
end
A --> E
E --> F
E --> G
G --> H
E --> I
E --> J
E --> K
subgraph "UI Libraries"
L["Kendo UI"]
M["AG Grid"]
N["Golden Layout"]
end
subgraph "Data Layer"
O["GraphQL Data Provider"]
P["MJAPI Server"]
end
O --> P
style A fill:#2d6a9f,stroke:#1a4971,color:#fff
style E fill:#2d8659,stroke:#1a5c3a,color:#fff
style F fill:#2d8659,stroke:#1a5c3a,color:#fff
style G fill:#7c5295,stroke:#563a6b,color:#fff
style I fill:#7c5295,stroke:#563a6b,color:#fff
style K fill:#b8762f,stroke:#8a5722,color:#fff
style O fill:#b8762f,stroke:#8a5722,color:#fff
```
## Overview
MJExplorer is a thin Angular application shell that assembles a rich set of MemberJunction Angular packages into a complete user experience. The application itself contains minimal custom code -- the bulk of functionality lives in the `@memberjunction/ng-*` packages.
**Key features:**
- **Entity Management**: Browse, view, create, update, and delete records across all entities
- **Custom Forms**: Extensible form system with both generated and custom form components
- **Dashboards**: Interactive dashboard system with customizable widgets and layouts
- **Reports**: Comprehensive reporting with export functionality
- **User Views**: Custom views with filtering, sorting, and grouping
- **Authentication**: Microsoft Entra ID (MSAL) and Auth0 integration
- **Real-time Updates**: WebSocket subscriptions for live data synchronization
- **File Management**: Integrated file storage and management
- **Full-text Search**: Search across entities and records
- **AI Integration**: AI-powered features via the MJ AI subsystem
## Prerequisites
- Node.js 18+ (20+ recommended)
- npm 9+
- MemberJunction API server running (default: `http://localhost:4000`)
- Valid authentication configuration (MSAL or Auth0)
## Getting Started
### 1. Configure Authentication
Set up your authentication provider in `src/environments/`:
```typescript
// environment.ts
export const environment = {
production: false,
CLIENT_ID: 'your-azure-ad-client-id',
TENANT_ID: 'your-azure-ad-tenant-id',
MJ_CORE_WS_URL: 'ws://localhost:4000',
MJ_CORE_HTTP_URL: 'http://localhost:4000',
AUTH_TYPE: 'msal' // or 'auth0'
};
```
### 2. Build
```bash
# From workspace root
npm run build
# Or just Explorer
cd packages/MJExplorer && npm run build
```
### 3. Start Development Server
```bash
npm run start:explorer
# or
cd packages/MJExplorer && npm start
```
The dev server starts on `http://localhost:4201` with Vite HMR for fast iteration.
## Build Pipeline
```mermaid
graph LR
A[TypeScript + Angular] --> B[ESBuild]
B --> C[Vite Dev Server]
B --> D[Production Bundle]
E[prebuild] --> F["mj codegen manifest
(Supplemental)"]
F --> B
style A fill:#2d6a9f,stroke:#1a4971,color:#fff
style B fill:#2d8659,stroke:#1a5c3a,color:#fff
style C fill:#7c5295,stroke:#563a6b,color:#fff
style D fill:#7c5295,stroke:#563a6b,color:#fff
style F fill:#b8762f,stroke:#8a5722,color:#fff
```
- Uses Angular's `application` builder powered by ESBuild
- Dev server uses Vite with HMR for fast iteration
- `@memberjunction/*` packages are excluded from Vite prebundling (they are symlinked workspace packages)
- Source maps configured for full debugging of symlinked packages
## Class Registration Manifests
MJExplorer uses dual manifests to prevent tree-shaking of `@RegisterClass`-decorated components:
1. **Pre-built manifest** (`@memberjunction/ng-bootstrap/mj-class-registrations`): All `@memberjunction/*` Angular packages
2. **Supplemental manifest** (`src/app/generated/class-registrations-manifest.ts`): User-defined components, generated at `prebuild` with `--exclude-packages @memberjunction`
## Project Structure
```
packages/MJExplorer/
src/
app/
app.module.ts # Root NgModule
app.component.ts # Root component
generated/ # Class registration manifest
demo/ # Demo/example components
environments/ # Environment-specific configs
assets/ # Static assets
angular.json # Angular build configuration
package.json
tsconfig.json
```
## Key Angular Package Dependencies
| Package | Purpose |
|---------|---------|
| `@memberjunction/ng-explorer-app` | Application shell, routing, navigation |
| `@memberjunction/ng-explorer-core` | Entity browsing, list views |
| `@memberjunction/ng-base-forms` | Form framework and base components |
| `@memberjunction/ng-core-entity-forms` | Auto-generated entity CRUD forms |
| `@memberjunction/ng-dashboards` | Dashboard framework and widgets |
| `@memberjunction/ng-explorer-settings` | User and application settings |
| `@memberjunction/ng-explorer-modules` | Additional feature modules |
| `@memberjunction/ng-auth-services` | Authentication services (MSAL, Auth0) |
| `@memberjunction/ng-bootstrap` | Angular class registration bootstrap |
| `@memberjunction/ng-shared` | Shared components and utilities |
| `@memberjunction/ng-tabstrip` | Tab-based navigation |
| `@memberjunction/ng-timeline` | Timeline visualization |
| `@memberjunction/ng-join-grid` | Relationship grid component |
| `@memberjunction/ng-record-changes` | Version history display |
| `@memberjunction/graphql-dataprovider` | GraphQL client for MJAPI |
## UI Component Libraries
| Library | Usage |
|---------|-------|
| Kendo UI for Angular | Grids, dropdowns, buttons, dialogs, inputs, navigation |
| AG Grid | High-performance data grids |
| Golden Layout | Flexible window management |
| dhtmlx-gantt | Gantt chart visualization |
## Scripts
| Script | Description |
|--------|-------------|
| `npm start` | Start dev server on port 4201 with Vite HMR |
| `npm run build` | Production build with ESBuild |
| `npm run start:stage` | Start with staging configuration |
| `npm run build:stage` | Build with staging configuration |
| `npm run watch` | Build in watch mode |
| `npm test` | Run unit tests |
## License
ISC