@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.
- package/dist/lib/components/list-management-dialog/list-management-dialog.component.d.ts +170 -0
- package/dist/lib/components/list-management-dialog/list-management-dialog.component.d.ts.map +1 -0
- package/dist/lib/components/list-management-dialog/list-management-dialog.component.js +939 -0
- package/dist/lib/components/list-management-dialog/list-management-dialog.component.js.map +1 -0
- package/dist/lib/models/list-management.models.d.ts +206 -0
- package/dist/lib/models/list-management.models.d.ts.map +1 -0
- package/dist/lib/models/list-management.models.js +2 -0
- package/dist/lib/models/list-management.models.js.map +1 -0
- package/dist/lib/module.d.ts +43 -0
- package/dist/lib/module.d.ts.map +1 -0
- package/dist/lib/module.js +93 -0
- package/dist/lib/module.js.map +1 -0
- package/dist/lib/services/list-management.service.d.ts +69 -0
- package/dist/lib/services/list-management.service.d.ts.map +1 -0
- package/dist/lib/services/list-management.service.js +387 -0
- package/dist/lib/services/list-management.service.js.map +1 -0
- package/dist/public-api.d.ts +10 -0
- package/dist/public-api.d.ts.map +1 -0
- package/dist/public-api.js +20 -0
- package/dist/public-api.js.map +1 -0
- package/package.json +48 -6
- package/README.md +0 -45
|
@@ -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": "
|
|
4
|
-
"description": "
|
|
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
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
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**
|