@memberjunction/ng-list-management 0.0.1 → 2.133.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,387 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Metadata, RunView } from '@memberjunction/core';
3
+ import { BehaviorSubject } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Service for managing list operations including data loading, caching,
7
+ * and batch add/remove operations.
8
+ */
9
+ export class ListManagementService {
10
+ CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes
11
+ // Cache storage
12
+ listCache = new Map();
13
+ categoryCache = null;
14
+ membershipCache = new Map();
15
+ // Loading state subjects
16
+ loadingSubject = new BehaviorSubject(false);
17
+ loading$ = this.loadingSubject.asObservable();
18
+ constructor() { }
19
+ /**
20
+ * Get lists for a specific entity, with optional caching
21
+ */
22
+ async getListsForEntity(entityId, userId, forceRefresh = false) {
23
+ const cacheKey = `${entityId}_${userId || 'all'}`;
24
+ // Check cache first
25
+ if (!forceRefresh) {
26
+ const cached = this.listCache.get(cacheKey);
27
+ if (cached && this.isCacheValid(cached)) {
28
+ return cached.data;
29
+ }
30
+ }
31
+ this.loadingSubject.next(true);
32
+ try {
33
+ const rv = new RunView();
34
+ let filter = `EntityID = '${entityId}'`;
35
+ if (userId) {
36
+ filter += ` AND UserID = '${userId}'`;
37
+ }
38
+ const result = await rv.RunView({
39
+ EntityName: 'Lists',
40
+ ExtraFilter: filter,
41
+ OrderBy: 'Name',
42
+ ResultType: 'entity_object'
43
+ });
44
+ if (result.Success) {
45
+ const lists = result.Results || [];
46
+ this.listCache.set(cacheKey, {
47
+ data: lists,
48
+ timestamp: new Date()
49
+ });
50
+ return lists;
51
+ }
52
+ else {
53
+ console.error('Failed to load lists:', result.ErrorMessage);
54
+ return [];
55
+ }
56
+ }
57
+ finally {
58
+ this.loadingSubject.next(false);
59
+ }
60
+ }
61
+ /**
62
+ * Get all list categories
63
+ */
64
+ async getListCategories(forceRefresh = false) {
65
+ if (!forceRefresh && this.categoryCache && this.isCacheValid(this.categoryCache)) {
66
+ return this.categoryCache.data;
67
+ }
68
+ const rv = new RunView();
69
+ const result = await rv.RunView({
70
+ EntityName: 'List Categories',
71
+ OrderBy: 'Name',
72
+ ResultType: 'entity_object'
73
+ });
74
+ if (result.Success) {
75
+ this.categoryCache = {
76
+ data: result.Results || [],
77
+ timestamp: new Date()
78
+ };
79
+ return this.categoryCache.data;
80
+ }
81
+ return [];
82
+ }
83
+ /**
84
+ * Get membership information for a set of records
85
+ * Returns a Map where key is listId and value is array of recordIds that are members
86
+ */
87
+ async getRecordMembership(entityId, recordIds) {
88
+ if (recordIds.length === 0) {
89
+ return new Map();
90
+ }
91
+ const cacheKey = `${entityId}_${recordIds.sort().join(',')}`;
92
+ // Check cache
93
+ const cached = this.membershipCache.get(cacheKey);
94
+ if (cached && this.isCacheValid(cached)) {
95
+ return cached.data;
96
+ }
97
+ this.loadingSubject.next(true);
98
+ try {
99
+ const rv = new RunView();
100
+ // Get all list details for these records
101
+ const recordIdFilter = recordIds.map(id => `'${id}'`).join(',');
102
+ const result = await rv.RunView({
103
+ EntityName: 'List Details',
104
+ ExtraFilter: `RecordID IN (${recordIdFilter})`,
105
+ ResultType: 'entity_object'
106
+ });
107
+ const membership = new Map();
108
+ if (result.Success && result.Results) {
109
+ for (const detail of result.Results) {
110
+ const existingRecords = membership.get(detail.ListID) || [];
111
+ if (!existingRecords.includes(detail.RecordID)) {
112
+ existingRecords.push(detail.RecordID);
113
+ }
114
+ membership.set(detail.ListID, existingRecords);
115
+ }
116
+ }
117
+ this.membershipCache.set(cacheKey, {
118
+ data: membership,
119
+ timestamp: new Date()
120
+ });
121
+ return membership;
122
+ }
123
+ finally {
124
+ this.loadingSubject.next(false);
125
+ }
126
+ }
127
+ /**
128
+ * Get lists that contain a specific record
129
+ */
130
+ async getListsForRecord(entityId, recordId) {
131
+ const rv = new RunView();
132
+ // Get list details for this record
133
+ const detailsResult = await rv.RunView({
134
+ EntityName: 'List Details',
135
+ ExtraFilter: `RecordID = '${recordId}'`,
136
+ ResultType: 'entity_object'
137
+ });
138
+ if (!detailsResult.Success || !detailsResult.Results || detailsResult.Results.length === 0) {
139
+ return [];
140
+ }
141
+ const listIds = [...new Set(detailsResult.Results.map((d) => d.ListID))];
142
+ // Get the lists filtered by entity
143
+ const listIdFilter = listIds.map(id => `'${id}'`).join(',');
144
+ const listsResult = await rv.RunView({
145
+ EntityName: 'Lists',
146
+ ExtraFilter: `ID IN (${listIdFilter}) AND EntityID = '${entityId}'`,
147
+ ResultType: 'entity_object'
148
+ });
149
+ return listsResult.Success ? (listsResult.Results || []) : [];
150
+ }
151
+ /**
152
+ * Get item count for a list
153
+ */
154
+ async getListItemCount(listId) {
155
+ const rv = new RunView();
156
+ const result = await rv.RunView({
157
+ EntityName: 'List Details',
158
+ ExtraFilter: `ListID = '${listId}'`,
159
+ ResultType: 'count_only'
160
+ });
161
+ return result.Success ? result.TotalRowCount : 0;
162
+ }
163
+ /**
164
+ * Build view models for lists with membership information
165
+ */
166
+ async buildListViewModels(lists, recordIds, membership) {
167
+ const viewModels = [];
168
+ const rv = new RunView();
169
+ // Get item counts for all lists in one batch query
170
+ const listIds = lists.map(l => l.ID);
171
+ const listIdFilter = listIds.map(id => `'${id}'`).join(',');
172
+ // Get counts grouped by list - using a regular query since we need aggregation
173
+ const countsResult = await rv.RunView({
174
+ EntityName: 'List Details',
175
+ ExtraFilter: listIds.length > 0 ? `ListID IN (${listIdFilter})` : '1=0',
176
+ ResultType: 'entity_object'
177
+ });
178
+ // Build count map
179
+ const countMap = new Map();
180
+ if (countsResult.Success && countsResult.Results) {
181
+ for (const detail of countsResult.Results) {
182
+ const current = countMap.get(detail.ListID) || 0;
183
+ countMap.set(detail.ListID, current + 1);
184
+ }
185
+ }
186
+ for (const list of lists) {
187
+ const memberRecordIds = membership.get(list.ID) || [];
188
+ const membershipCount = memberRecordIds.length;
189
+ const totalSelected = recordIds.length;
190
+ viewModels.push({
191
+ list,
192
+ itemCount: countMap.get(list.ID) || 0,
193
+ membershipCount,
194
+ totalSelectedRecords: totalSelected,
195
+ isFullMember: membershipCount === totalSelected && totalSelected > 0,
196
+ isPartialMember: membershipCount > 0 && membershipCount < totalSelected,
197
+ isNotMember: membershipCount === 0,
198
+ lastUpdated: list.Get('__mj_UpdatedAt') || new Date(),
199
+ category: undefined, // Can be populated separately if needed
200
+ isSelectedForAdd: false,
201
+ isSelectedForRemove: false
202
+ });
203
+ }
204
+ return viewModels;
205
+ }
206
+ /**
207
+ * Add records to one or more lists
208
+ */
209
+ async addRecordsToLists(listIds, recordIds, skipDuplicates = true) {
210
+ const result = {
211
+ success: 0,
212
+ failed: 0,
213
+ skipped: 0,
214
+ errors: []
215
+ };
216
+ const md = new Metadata();
217
+ // Get existing membership to skip duplicates
218
+ let existingMembership = new Map();
219
+ if (skipDuplicates) {
220
+ const rv = new RunView();
221
+ const listIdFilter = listIds.map(id => `'${id}'`).join(',');
222
+ const recordIdFilter = recordIds.map(id => `'${id}'`).join(',');
223
+ const existing = await rv.RunView({
224
+ EntityName: 'List Details',
225
+ ExtraFilter: `ListID IN (${listIdFilter}) AND RecordID IN (${recordIdFilter})`,
226
+ ResultType: 'entity_object'
227
+ });
228
+ if (existing.Success && existing.Results) {
229
+ for (const detail of existing.Results) {
230
+ const recordSet = existingMembership.get(detail.ListID) || new Set();
231
+ recordSet.add(detail.RecordID);
232
+ existingMembership.set(detail.ListID, recordSet);
233
+ }
234
+ }
235
+ }
236
+ // Add records to each list
237
+ for (const listId of listIds) {
238
+ const existingRecords = existingMembership.get(listId) || new Set();
239
+ for (const recordId of recordIds) {
240
+ // Skip if already exists
241
+ if (skipDuplicates && existingRecords.has(recordId)) {
242
+ result.skipped++;
243
+ continue;
244
+ }
245
+ try {
246
+ const listDetail = await md.GetEntityObject('List Details');
247
+ listDetail.NewRecord();
248
+ listDetail.ListID = listId;
249
+ listDetail.RecordID = recordId;
250
+ listDetail.Sequence = 0;
251
+ listDetail.Status = 'Active';
252
+ const saveResult = await listDetail.Save();
253
+ if (saveResult) {
254
+ result.success++;
255
+ }
256
+ else {
257
+ result.failed++;
258
+ result.errors.push(`Failed to add record ${recordId} to list ${listId}`);
259
+ }
260
+ }
261
+ catch (error) {
262
+ result.failed++;
263
+ const errorMessage = error instanceof Error ? error.message : String(error);
264
+ result.errors.push(`Error adding record ${recordId} to list ${listId}: ${errorMessage}`);
265
+ }
266
+ }
267
+ }
268
+ // Invalidate membership cache
269
+ this.membershipCache.clear();
270
+ return result;
271
+ }
272
+ /**
273
+ * Remove records from one or more lists
274
+ */
275
+ async removeRecordsFromLists(listIds, recordIds) {
276
+ const result = {
277
+ success: 0,
278
+ failed: 0,
279
+ skipped: 0,
280
+ errors: []
281
+ };
282
+ const md = new Metadata();
283
+ const rv = new RunView();
284
+ // Find existing list details to delete
285
+ const listIdFilter = listIds.map(id => `'${id}'`).join(',');
286
+ const recordIdFilter = recordIds.map(id => `'${id}'`).join(',');
287
+ const existingResult = await rv.RunView({
288
+ EntityName: 'List Details',
289
+ ExtraFilter: `ListID IN (${listIdFilter}) AND RecordID IN (${recordIdFilter})`,
290
+ ResultType: 'entity_object'
291
+ });
292
+ if (!existingResult.Success) {
293
+ result.errors.push('Failed to query existing list details');
294
+ return result;
295
+ }
296
+ // Delete each matching detail
297
+ for (const detail of existingResult.Results || []) {
298
+ try {
299
+ const deleteResult = await detail.Delete();
300
+ if (deleteResult) {
301
+ result.success++;
302
+ }
303
+ else {
304
+ result.failed++;
305
+ result.errors.push(`Failed to remove record ${detail.RecordID} from list ${detail.ListID}`);
306
+ }
307
+ }
308
+ catch (error) {
309
+ result.failed++;
310
+ const errorMessage = error instanceof Error ? error.message : String(error);
311
+ result.errors.push(`Error removing record: ${errorMessage}`);
312
+ }
313
+ }
314
+ // Invalidate caches
315
+ this.membershipCache.clear();
316
+ return result;
317
+ }
318
+ /**
319
+ * Create a new list
320
+ */
321
+ async createList(config) {
322
+ const md = new Metadata();
323
+ try {
324
+ const list = await md.GetEntityObject('Lists');
325
+ list.NewRecord();
326
+ list.Name = config.name;
327
+ list.Description = config.description || '';
328
+ list.EntityID = config.entityId;
329
+ list.UserID = md.CurrentUser.ID;
330
+ if (config.categoryId) {
331
+ list.CategoryID = config.categoryId;
332
+ }
333
+ const saveResult = await list.Save();
334
+ if (saveResult) {
335
+ // Invalidate list cache
336
+ this.invalidateListCache(config.entityId);
337
+ return list;
338
+ }
339
+ return null;
340
+ }
341
+ catch (error) {
342
+ console.error('Error creating list:', error);
343
+ return null;
344
+ }
345
+ }
346
+ /**
347
+ * Check if a cache entry is still valid
348
+ */
349
+ isCacheValid(entry) {
350
+ const now = new Date().getTime();
351
+ const entryTime = entry.timestamp.getTime();
352
+ return (now - entryTime) < this.CACHE_TTL_MS;
353
+ }
354
+ /**
355
+ * Invalidate cache for a specific entity or all caches
356
+ */
357
+ invalidateCache(entityId) {
358
+ if (entityId) {
359
+ this.invalidateListCache(entityId);
360
+ }
361
+ else {
362
+ this.listCache.clear();
363
+ this.categoryCache = null;
364
+ this.membershipCache.clear();
365
+ }
366
+ }
367
+ /**
368
+ * Invalidate list cache for a specific entity
369
+ */
370
+ invalidateListCache(entityId) {
371
+ // Remove all cache entries that start with this entityId
372
+ for (const key of this.listCache.keys()) {
373
+ if (key.startsWith(entityId)) {
374
+ this.listCache.delete(key);
375
+ }
376
+ }
377
+ }
378
+ static ɵfac = function ListManagementService_Factory(t) { return new (t || ListManagementService)(); };
379
+ static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ListManagementService, factory: ListManagementService.ɵfac, providedIn: 'root' });
380
+ }
381
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ListManagementService, [{
382
+ type: Injectable,
383
+ args: [{
384
+ providedIn: 'root'
385
+ }]
386
+ }], () => [], null); })();
387
+ //# sourceMappingURL=list-management.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-management.service.js","sourceRoot":"","sources":["../../../src/lib/services/list-management.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export * from './lib/module';
2
+ export * from './lib/components/list-management-dialog/list-management-dialog.component';
3
+ export * from './lib/services/list-management.service';
4
+ export * from './lib/models/list-management.models';
5
+ /**
6
+ * Tree-shaking prevention function.
7
+ * Call this from the consuming module to ensure the components are included.
8
+ */
9
+ export declare function LoadListManagement(): void;
10
+ //# sourceMappingURL=public-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAKA,cAAc,cAAc,CAAC;AAG7B,cAAc,0EAA0E,CAAC;AAGzF,cAAc,wCAAwC,CAAC;AAGvD,cAAc,qCAAqC,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC"}
@@ -0,0 +1,20 @@
1
+ /*
2
+ * Public API Surface for @memberjunction/ng-list-management
3
+ */
4
+ // Module
5
+ export * from './lib/module';
6
+ // Components
7
+ export * from './lib/components/list-management-dialog/list-management-dialog.component';
8
+ // Services
9
+ export * from './lib/services/list-management.service';
10
+ // Models
11
+ export * from './lib/models/list-management.models';
12
+ /**
13
+ * Tree-shaking prevention function.
14
+ * Call this from the consuming module to ensure the components are included.
15
+ */
16
+ export function LoadListManagement() {
17
+ // This function exists solely to prevent tree-shaking
18
+ // of the list management components
19
+ }
20
+ //# sourceMappingURL=public-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-api.js","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS;AACT,cAAc,cAAc,CAAC;AAE7B,aAAa;AACb,cAAc,0EAA0E,CAAC;AAEzF,WAAW;AACX,cAAc,wCAAwC,CAAC;AAEvD,SAAS;AACT,cAAc,qCAAqC,CAAC;AAEpD;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,sDAAsD;IACtD,oCAAoC;AACtC,CAAC"}
package/package.json CHANGED
@@ -1,10 +1,52 @@
1
1
  {
2
2
  "name": "@memberjunction/ng-list-management",
3
- "version": "0.0.1",
4
- "description": "OIDC trusted publishing setup package for @memberjunction/ng-list-management",
3
+ "version": "2.133.0",
4
+ "description": "MemberJunction: Angular Components for managing entity list membership with beautiful, responsive UI",
5
+ "main": "./dist/public-api.js",
6
+ "typings": "./dist/public-api.d.ts",
7
+ "files": [
8
+ "/dist"
9
+ ],
10
+ "scripts": {
11
+ "test": "echo \"Error: no test specified\" && exit 1",
12
+ "build": "ngc"
13
+ },
5
14
  "keywords": [
6
- "oidc",
7
- "trusted-publishing",
8
- "setup"
9
- ]
15
+ "MemberJunction",
16
+ "Angular",
17
+ "Lists",
18
+ "Entity Management"
19
+ ],
20
+ "author": "",
21
+ "license": "ISC",
22
+ "devDependencies": {
23
+ "@angular/compiler": "18.0.2",
24
+ "@angular/compiler-cli": "18.0.2"
25
+ },
26
+ "peerDependencies": {
27
+ "@angular/common": "18.0.2",
28
+ "@angular/core": "18.0.2",
29
+ "@angular/forms": "18.0.2",
30
+ "@angular/router": "18.0.2",
31
+ "@progress/kendo-angular-buttons": "16.2.0",
32
+ "@progress/kendo-angular-dialog": "16.2.0",
33
+ "@progress/kendo-angular-inputs": "16.2.0",
34
+ "@progress/kendo-angular-layout": "16.2.0",
35
+ "@progress/kendo-angular-dropdowns": "16.2.0",
36
+ "rxjs": "^7.8.1"
37
+ },
38
+ "dependencies": {
39
+ "@memberjunction/core": "2.133.0",
40
+ "@memberjunction/core-entities": "2.133.0",
41
+ "@memberjunction/global": "2.133.0",
42
+ "@memberjunction/ng-container-directives": "2.133.0",
43
+ "@memberjunction/ng-shared": "2.133.0",
44
+ "@memberjunction/ng-shared-generic": "2.133.0",
45
+ "tslib": "^2.3.0"
46
+ },
47
+ "sideEffects": false,
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "https://github.com/MemberJunction/MJ"
51
+ }
10
52
  }
package/README.md DELETED
@@ -1,45 +0,0 @@
1
- # @memberjunction/ng-list-management
2
-
3
- ## ⚠️ IMPORTANT NOTICE ⚠️
4
-
5
- **This package is created solely for the purpose of setting up OIDC (OpenID Connect) trusted publishing with npm.**
6
-
7
- This is **NOT** a functional package and contains **NO** code or functionality beyond the OIDC setup configuration.
8
-
9
- ## Purpose
10
-
11
- This package exists to:
12
- 1. Configure OIDC trusted publishing for the package name `@memberjunction/ng-list-management`
13
- 2. Enable secure, token-less publishing from CI/CD workflows
14
- 3. Establish provenance for packages published under this name
15
-
16
- ## What is OIDC Trusted Publishing?
17
-
18
- OIDC trusted publishing allows package maintainers to publish packages directly from their CI/CD workflows without needing to manage npm access tokens. Instead, it uses OpenID Connect to establish trust between the CI/CD provider (like GitHub Actions) and npm.
19
-
20
- ## Setup Instructions
21
-
22
- To properly configure OIDC trusted publishing for this package:
23
-
24
- 1. Go to [npmjs.com](https://www.npmjs.com/) and navigate to your package settings
25
- 2. Configure the trusted publisher (e.g., GitHub Actions)
26
- 3. Specify the repository and workflow that should be allowed to publish
27
- 4. Use the configured workflow to publish your actual package
28
-
29
- ## DO NOT USE THIS PACKAGE
30
-
31
- This package is a placeholder for OIDC configuration only. It:
32
- - Contains no executable code
33
- - Provides no functionality
34
- - Should not be installed as a dependency
35
- - Exists only for administrative purposes
36
-
37
- ## More Information
38
-
39
- For more details about npm's trusted publishing feature, see:
40
- - [npm Trusted Publishing Documentation](https://docs.npmjs.com/generating-provenance-statements)
41
- - [GitHub Actions OIDC Documentation](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect)
42
-
43
- ---
44
-
45
- **Maintained for OIDC setup purposes only**