# @memberjunction/ng-list-management Angular components for the MemberJunction Lists feature: list-membership management, sharing, refresh-from-source preview, audience picking, tagging, and lightweight stats. Drop-in pieces that any MJ app can use; the components here own the UI shape, and [`@memberjunction/lists`](../../../Lists) owns the underlying business logic. ## Installation ```bash npm install @memberjunction/ng-list-management ``` ## Module import ```typescript import { ListManagementModule } from '@memberjunction/ng-list-management'; @NgModule({ imports: [ListManagementModule] }) export class YourModule {} ``` All components below are exported via this single module. ## Components | Selector | Component | Purpose | | ------------------------------ | ------------------------------------ | ------------------------------------------------------------------------------------------- | | `mj-list-management-dialog` | `ListManagementDialogComponent` | Dialog for adding/removing records to/from lists | | `mj-list-share-dialog` | `ListShareDialogComponent` | Share-with-users-or-roles dialog (audit-log + notification footer links) | | `mj-list-delta-confirm` | `ListDeltaConfirmComponent` | Preview-and-confirm dialog for any mutating list op (drop-guard UX) | | `mj-save-view-as-list-dialog` | `SaveViewAsListDialogComponent` | Materialize a User View into a new static List (with optional lineage + filter snapshot) | | `mj-list-invitations` | `ListInvitationsComponent` | Per-list invitations management — Pending / Accepted / Expired / Revoked tabs + send form | | `mj-list-audit-log` | `ListAuditLogComponent` | Per-list audit-log viewer reading the generic `MJ: Audit Logs` table | | `mj-lists-shared-with-me` | `ListsSharedWithMeComponent` | Browse-style grid of all lists shared with the current user | | `mj-list-stats` | `ListStatsComponent` | Side-panel usage stats (members, monthly growth, active shares, recent-activity feed) | | `mj-tag-chips` | `TagChipsComponent` | Compact tag chips for any entity record (read-only + editable variants) | | `mj-audience-source-picker` | `AudienceSourcePickerComponent` | Three-tab audience picker — List / View / Ad-hoc Filter — emits typed `AudienceSource` | | `mj-audience-source-summary` | `AudienceSourceSummaryComponent` | Compact friendly-name summary of a selected `AudienceSource` | ## Component reference ### `mj-list-delta-confirm` The **only** UI path that emits a valid `DeltaToken` to apply a list mutation. Two visual states — safe (green) and drop-warning (red with a required acknowledgement checkbox). ```html ``` `(Confirm)` emits the `DeltaToken` string; pass it back to `GraphQLListsClient.ApplyListDelta({ Delta, ConfirmDrops })`. ### `mj-save-view-as-list-dialog` Materializes a User View into a new List. Surfaces the lineage options (one-time snapshot vs. remember source view) and the freeze-filter toggle (`UseSnapshot`). ```html ``` `(Save)` emits a `SaveViewAsListResult` — caller invokes `GraphQLListsClient.MaterializeFromView(viewId, opts)`. ### `mj-list-invitations` Full invitations management for one list. Drives the `Invite` / `RevokeInvitation` / "Resend" flows from `ListSharing`. ```html ``` ### `mj-list-audit-log` Per-list audit log viewer. Reads from `MJ: Audit Logs` filtered to the List entity + this list's ID. Joins users + audit-log-types in a single batch query so the table renders names, not UUIDs. ```html ``` ### `mj-lists-shared-with-me` Browse-style grid for lists shared with the current user. Click events bubble up via `OpenList` so the host app can route through its own navigation. ```html ``` ### `mj-list-stats` Compact side panel for a list detail view. Surfaces member count, this-month growth, active share count, time-since-last-activity, and a recent-activity feed pulled from the audit log. ```html ``` ### `mj-tag-chips` Compact, reusable tag chips for any entity record. Backed by `MJ: Tagged Items`. Read-only by default; passing `[Editable]="true"` shows an inline autocomplete add field and per-chip remove buttons. ```html ``` ### `mj-audience-source-picker` + `mj-audience-source-summary` Reusable audience picker for Communications and any other audience-aware feature. Emits a typed `AudienceSource` discriminated union (same shape as `ListSource` from `@memberjunction/lists`). ```html ``` Three tabs: **List** (pick a saved `MJ: List`), **View** (pick a `MJ: User View`, marked "live"), **Ad-hoc Filter** (entity + free-form `ExtraFilter`). ## Services | Service | Purpose | | --------------------- | -------------------------------------------------------------------- | | `ListManagementService` | Add/remove/create list operations from the management dialog | | `ListSharingService` | Direct share writes from the share dialog (Phase 1 path; new code prefer the server-side `ListSharing` via `GraphQLListsClient`) | ## Companion packages For the underlying business logic and the wire-format client: - [`@memberjunction/lists`](../../../Lists) — `ListOperations`, `ListSharing`, `AudienceResolver`, delta-token contract. - [`@memberjunction/graphql-dataprovider`](../../../GraphQLDataProvider/README.md) — `GraphQLListsClient` (typed client mirroring the `ListOperationsResolver`). - [`@memberjunction/core-actions`](../../../Actions/CoreActions/README.md) — `MaterializeListFromView`, `ShareList`, `Compose Lists`, `Move List Members`, `Resolve Audience`, etc. — every UI capability also available as an MJ Action. ## Dependencies - [@memberjunction/core](../../../MJCore/readme.md) — `Metadata`, `RunView` - [@memberjunction/core-entities](../../../MJCoreEntities/readme.md) — generated entity types - [@memberjunction/lists](../../../Lists) — `AudienceSource`, `ListDelta`, `SharePermissionLevel`, etc. - [@memberjunction/graphql-dataprovider](../../../GraphQLDataProvider/README.md) — `GraphQLListsClient` - [@memberjunction/ng-base-types](../base-types/README.md) — `BaseAngularComponent` for multi-provider support - [@memberjunction/ng-shared-generic](../shared/README.md) — loading component - [@memberjunction/ng-ui-components](../ui-components) — `mj-dialog`, `mjButton`, etc.