@memberjunction/ng-list-management 6.2.0-edge.0 → 6.2.0-edge.1

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.
Files changed (53) hide show
  1. package/dist/lib/components/audience-source-picker/audience-source-picker.component.d.ts +74 -14
  2. package/dist/lib/components/audience-source-picker/audience-source-picker.component.d.ts.map +1 -1
  3. package/dist/lib/components/audience-source-picker/audience-source-picker.component.js +177 -57
  4. package/dist/lib/components/audience-source-picker/audience-source-picker.component.js.map +1 -1
  5. package/dist/lib/components/audience-source-summary/audience-source-summary.component.d.ts +7 -1
  6. package/dist/lib/components/audience-source-summary/audience-source-summary.component.d.ts.map +1 -1
  7. package/dist/lib/components/audience-source-summary/audience-source-summary.component.js +17 -5
  8. package/dist/lib/components/audience-source-summary/audience-source-summary.component.js.map +1 -1
  9. package/dist/lib/components/list-audit-log/list-audit-log.component.d.ts +30 -4
  10. package/dist/lib/components/list-audit-log/list-audit-log.component.d.ts.map +1 -1
  11. package/dist/lib/components/list-audit-log/list-audit-log.component.js +54 -14
  12. package/dist/lib/components/list-audit-log/list-audit-log.component.js.map +1 -1
  13. package/dist/lib/components/list-delta-confirm/list-delta-confirm.component.d.ts +17 -1
  14. package/dist/lib/components/list-delta-confirm/list-delta-confirm.component.d.ts.map +1 -1
  15. package/dist/lib/components/list-delta-confirm/list-delta-confirm.component.js +45 -13
  16. package/dist/lib/components/list-delta-confirm/list-delta-confirm.component.js.map +1 -1
  17. package/dist/lib/components/list-invitations/list-invitations.component.d.ts +48 -8
  18. package/dist/lib/components/list-invitations/list-invitations.component.d.ts.map +1 -1
  19. package/dist/lib/components/list-invitations/list-invitations.component.js +108 -28
  20. package/dist/lib/components/list-invitations/list-invitations.component.js.map +1 -1
  21. package/dist/lib/components/list-management-dialog/list-management-dialog.component.d.ts +123 -15
  22. package/dist/lib/components/list-management-dialog/list-management-dialog.component.d.ts.map +1 -1
  23. package/dist/lib/components/list-management-dialog/list-management-dialog.component.js +312 -100
  24. package/dist/lib/components/list-management-dialog/list-management-dialog.component.js.map +1 -1
  25. package/dist/lib/components/list-share-dialog/list-share-dialog.component.d.ts +128 -14
  26. package/dist/lib/components/list-share-dialog/list-share-dialog.component.d.ts.map +1 -1
  27. package/dist/lib/components/list-share-dialog/list-share-dialog.component.js +288 -92
  28. package/dist/lib/components/list-share-dialog/list-share-dialog.component.js.map +1 -1
  29. package/dist/lib/components/list-stats/list-stats.component.d.ts +32 -6
  30. package/dist/lib/components/list-stats/list-stats.component.d.ts.map +1 -1
  31. package/dist/lib/components/list-stats/list-stats.component.js +67 -15
  32. package/dist/lib/components/list-stats/list-stats.component.js.map +1 -1
  33. package/dist/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.d.ts +44 -8
  34. package/dist/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.d.ts.map +1 -1
  35. package/dist/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.js +100 -28
  36. package/dist/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.js.map +1 -1
  37. package/dist/lib/components/shared-with-me/shared-with-me.component.d.ts +18 -2
  38. package/dist/lib/components/shared-with-me/shared-with-me.component.d.ts.map +1 -1
  39. package/dist/lib/components/shared-with-me/shared-with-me.component.js +41 -9
  40. package/dist/lib/components/shared-with-me/shared-with-me.component.js.map +1 -1
  41. package/dist/lib/components/tag-chips/tag-chips.component.d.ts +30 -6
  42. package/dist/lib/components/tag-chips/tag-chips.component.d.ts.map +1 -1
  43. package/dist/lib/components/tag-chips/tag-chips.component.js +76 -28
  44. package/dist/lib/components/tag-chips/tag-chips.component.js.map +1 -1
  45. package/dist/lib/services/list-management.service.d.ts +25 -1
  46. package/dist/lib/services/list-management.service.d.ts.map +1 -1
  47. package/dist/lib/services/list-management.service.js +59 -11
  48. package/dist/lib/services/list-management.service.js.map +1 -1
  49. package/dist/lib/services/list-sharing.service.d.ts +42 -1
  50. package/dist/lib/services/list-sharing.service.d.ts.map +1 -1
  51. package/dist/lib/services/list-sharing.service.js +85 -17
  52. package/dist/lib/services/list-sharing.service.js.map +1 -1
  53. package/package.json +11 -11
@@ -32,21 +32,79 @@ export declare class AudienceSourcePickerComponent extends BaseAngularComponent
32
32
  /** When set, restrict the entity dropdown to this entity (lock it). */
33
33
  LockedEntityName: string | null;
34
34
  SourceChange: EventEmitter<import("@memberjunction/lists-base").ListSource | null>;
35
- activeTab: AudienceSourcePickerTab;
36
- entityOptions: EntityInfo[];
37
- selectedEntityName: string | null;
38
- availableLists: MJListEntity[];
39
- filteredLists: MJListEntity[];
40
- listSearch: string;
41
- selectedListId: string | null;
42
- availableViews: MJUserViewEntity[];
43
- filteredViews: MJUserViewEntity[];
44
- viewSearch: string;
45
- selectedViewId: string | null;
46
- adhocEntityName: string | null;
47
- adhocFilter: string;
48
- loading: boolean;
35
+ ActiveTab: AudienceSourcePickerTab;
36
+ /** @deprecated Use {@link ActiveTab}. */
37
+ get activeTab(): AudienceSourcePickerTab;
38
+ /** @deprecated Use {@link ActiveTab}. */
39
+ set activeTab(value: AudienceSourcePickerTab);
40
+ EntityOptions: EntityInfo[];
41
+ /** @deprecated Use {@link EntityOptions}. */
42
+ get entityOptions(): EntityInfo[];
43
+ /** @deprecated Use {@link EntityOptions}. */
44
+ set entityOptions(value: EntityInfo[]);
45
+ SelectedEntityName: string | null;
46
+ /** @deprecated Use {@link SelectedEntityName}. */
47
+ get selectedEntityName(): string | null;
48
+ /** @deprecated Use {@link SelectedEntityName}. */
49
+ set selectedEntityName(value: string | null);
50
+ AvailableLists: MJListEntity[];
51
+ /** @deprecated Use {@link AvailableLists}. */
52
+ get availableLists(): MJListEntity[];
53
+ /** @deprecated Use {@link AvailableLists}. */
54
+ set availableLists(value: MJListEntity[]);
55
+ FilteredLists: MJListEntity[];
56
+ /** @deprecated Use {@link FilteredLists}. */
57
+ get filteredLists(): MJListEntity[];
58
+ /** @deprecated Use {@link FilteredLists}. */
59
+ set filteredLists(value: MJListEntity[]);
60
+ ListSearch: string;
61
+ /** @deprecated Use {@link ListSearch}. */
62
+ get listSearch(): string;
63
+ /** @deprecated Use {@link ListSearch}. */
64
+ set listSearch(value: string);
65
+ SelectedListId: string | null;
66
+ /** @deprecated Use {@link SelectedListId}. */
67
+ get selectedListId(): string | null;
68
+ /** @deprecated Use {@link SelectedListId}. */
69
+ set selectedListId(value: string | null);
70
+ AvailableViews: MJUserViewEntity[];
71
+ /** @deprecated Use {@link AvailableViews}. */
72
+ get availableViews(): MJUserViewEntity[];
73
+ /** @deprecated Use {@link AvailableViews}. */
74
+ set availableViews(value: MJUserViewEntity[]);
75
+ FilteredViews: MJUserViewEntity[];
76
+ /** @deprecated Use {@link FilteredViews}. */
77
+ get filteredViews(): MJUserViewEntity[];
78
+ /** @deprecated Use {@link FilteredViews}. */
79
+ set filteredViews(value: MJUserViewEntity[]);
80
+ ViewSearch: string;
81
+ /** @deprecated Use {@link ViewSearch}. */
82
+ get viewSearch(): string;
83
+ /** @deprecated Use {@link ViewSearch}. */
84
+ set viewSearch(value: string);
85
+ SelectedViewId: string | null;
86
+ /** @deprecated Use {@link SelectedViewId}. */
87
+ get selectedViewId(): string | null;
88
+ /** @deprecated Use {@link SelectedViewId}. */
89
+ set selectedViewId(value: string | null);
90
+ AdhocEntityName: string | null;
91
+ /** @deprecated Use {@link AdhocEntityName}. */
92
+ get adhocEntityName(): string | null;
93
+ /** @deprecated Use {@link AdhocEntityName}. */
94
+ set adhocEntityName(value: string | null);
95
+ AdhocFilter: string;
96
+ /** @deprecated Use {@link AdhocFilter}. */
97
+ get adhocFilter(): string;
98
+ /** @deprecated Use {@link AdhocFilter}. */
99
+ set adhocFilter(value: string);
100
+ Loading: boolean;
101
+ /** @deprecated Use {@link Loading}. */
102
+ get loading(): boolean;
103
+ /** @deprecated Use {@link Loading}. */
104
+ set loading(value: boolean);
49
105
  ngOnInit(): Promise<void>;
106
+ SetTab(tab: AudienceSourcePickerTab): Promise<void>;
107
+ /** @deprecated Use {@link SetTab}. */
50
108
  setTab(tab: AudienceSourcePickerTab): Promise<void>;
51
109
  OnEntityChange(name: string): Promise<void>;
52
110
  OnListSearchChange(): void;
@@ -58,6 +116,8 @@ export declare class AudienceSourcePickerComponent extends BaseAngularComponent
58
116
  * Build the currently-selected `AudienceSource` from picker state, or
59
117
  * `null` if the picker isn't yet in a complete state.
60
118
  */
119
+ get CurrentSource(): AudienceSource | null;
120
+ /** @deprecated Use {@link CurrentSource}. */
61
121
  get currentSource(): AudienceSource | null;
62
122
  private emitCurrentSource;
63
123
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"audience-source-picker.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/audience-source-picker/audience-source-picker.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyD,YAAY,EAAS,MAAM,EAAkB,MAAM,eAAe,CAAC;AAEnI,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;;AAEjE;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhE,qBAOa,6BAA8B,SAAQ,oBAAqB,YAAW,MAAM;IACvF,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6B;IAEjD;;;OAGG;IACH,IACI,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,EActC;IACD,IAAI,MAAM,IAAI,cAAc,GAAG,IAAI,CAElC;IACD,OAAO,CAAC,OAAO,CAA+B;IAE9C,uEAAuE;IAC9D,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEtC,YAAY,uEAA6C;IAE5D,SAAS,EAAE,uBAAuB,CAAU;IAC5C,aAAa,EAAE,UAAU,EAAE,CAAM;IAGjC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACzC,cAAc,EAAE,YAAY,EAAE,CAAM;IACpC,aAAa,EAAE,YAAY,EAAE,CAAM;IACnC,UAAU,SAAM;IAChB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGrC,cAAc,EAAE,gBAAgB,EAAE,CAAM;IACxC,aAAa,EAAE,gBAAgB,EAAE,CAAM;IACvC,UAAU,SAAM;IAChB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGrC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IACtC,WAAW,SAAM;IAEjB,OAAO,UAAS;IAEjB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAclB,MAAM,CAAC,GAAG,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjD,kBAAkB,IAAI,IAAI;IAI1B,kBAAkB,IAAI,IAAI;IAI1B,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAKtC,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAK1C,mBAAmB,IAAI,IAAI;IAIlC;;;OAGG;IACH,IAAW,aAAa,IAAI,cAAc,GAAG,IAAI,CAYhD;IAED,OAAO,CAAC,iBAAiB;IAMzB;;;;OAIG;YACW,cAAc;IAsC5B,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,sBAAsB;yCAtLnB,6BAA6B;2CAA7B,6BAA6B;CA6LzC"}
1
+ {"version":3,"file":"audience-source-picker.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/audience-source-picker/audience-source-picker.component.ts"],"names":[],"mappings":"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"}
@@ -179,16 +179,16 @@ export class AudienceSourcePickerComponent extends BaseAngularComponent {
179
179
  this._source = value;
180
180
  if (value) {
181
181
  // Pick the right tab + restore the saved field values.
182
- this.activeTab = value.kind;
182
+ this.ActiveTab = value.kind;
183
183
  if (value.kind === 'list') {
184
- this.selectedListId = value.listId;
184
+ this.SelectedListId = value.listId;
185
185
  }
186
186
  else if (value.kind === 'view') {
187
- this.selectedViewId = value.viewId;
187
+ this.SelectedViewId = value.viewId;
188
188
  }
189
189
  else {
190
- this.adhocEntityName = value.entityName;
191
- this.adhocFilter = value.extraFilter;
190
+ this.AdhocEntityName = value.entityName;
191
+ this.AdhocFilter = value.extraFilter;
192
192
  }
193
193
  }
194
194
  }
@@ -199,48 +199,164 @@ export class AudienceSourcePickerComponent extends BaseAngularComponent {
199
199
  /** When set, restrict the entity dropdown to this entity (lock it). */
200
200
  LockedEntityName = null;
201
201
  SourceChange = new EventEmitter();
202
- activeTab = 'list';
203
- entityOptions = [];
202
+ ActiveTab = 'list';
203
+ /** @deprecated Use {@link ActiveTab}. */
204
+ get activeTab() {
205
+ return this.ActiveTab;
206
+ }
207
+ /** @deprecated Use {@link ActiveTab}. */
208
+ set activeTab(value) {
209
+ this.ActiveTab = value;
210
+ }
211
+ EntityOptions = [];
212
+ /** @deprecated Use {@link EntityOptions}. */
213
+ get entityOptions() {
214
+ return this.EntityOptions;
215
+ }
216
+ /** @deprecated Use {@link EntityOptions}. */
217
+ set entityOptions(value) {
218
+ this.EntityOptions = value;
219
+ }
204
220
  // List-tab state
205
- selectedEntityName = null;
206
- availableLists = [];
207
- filteredLists = [];
208
- listSearch = '';
209
- selectedListId = null;
221
+ SelectedEntityName = null;
222
+ /** @deprecated Use {@link SelectedEntityName}. */
223
+ get selectedEntityName() {
224
+ return this.SelectedEntityName;
225
+ }
226
+ /** @deprecated Use {@link SelectedEntityName}. */
227
+ set selectedEntityName(value) {
228
+ this.SelectedEntityName = value;
229
+ }
230
+ AvailableLists = [];
231
+ /** @deprecated Use {@link AvailableLists}. */
232
+ get availableLists() {
233
+ return this.AvailableLists;
234
+ }
235
+ /** @deprecated Use {@link AvailableLists}. */
236
+ set availableLists(value) {
237
+ this.AvailableLists = value;
238
+ }
239
+ FilteredLists = [];
240
+ /** @deprecated Use {@link FilteredLists}. */
241
+ get filteredLists() {
242
+ return this.FilteredLists;
243
+ }
244
+ /** @deprecated Use {@link FilteredLists}. */
245
+ set filteredLists(value) {
246
+ this.FilteredLists = value;
247
+ }
248
+ ListSearch = '';
249
+ /** @deprecated Use {@link ListSearch}. */
250
+ get listSearch() {
251
+ return this.ListSearch;
252
+ }
253
+ /** @deprecated Use {@link ListSearch}. */
254
+ set listSearch(value) {
255
+ this.ListSearch = value;
256
+ }
257
+ SelectedListId = null;
258
+ /** @deprecated Use {@link SelectedListId}. */
259
+ get selectedListId() {
260
+ return this.SelectedListId;
261
+ }
262
+ /** @deprecated Use {@link SelectedListId}. */
263
+ set selectedListId(value) {
264
+ this.SelectedListId = value;
265
+ }
210
266
  // View-tab state
211
- availableViews = [];
212
- filteredViews = [];
213
- viewSearch = '';
214
- selectedViewId = null;
267
+ AvailableViews = [];
268
+ /** @deprecated Use {@link AvailableViews}. */
269
+ get availableViews() {
270
+ return this.AvailableViews;
271
+ }
272
+ /** @deprecated Use {@link AvailableViews}. */
273
+ set availableViews(value) {
274
+ this.AvailableViews = value;
275
+ }
276
+ FilteredViews = [];
277
+ /** @deprecated Use {@link FilteredViews}. */
278
+ get filteredViews() {
279
+ return this.FilteredViews;
280
+ }
281
+ /** @deprecated Use {@link FilteredViews}. */
282
+ set filteredViews(value) {
283
+ this.FilteredViews = value;
284
+ }
285
+ ViewSearch = '';
286
+ /** @deprecated Use {@link ViewSearch}. */
287
+ get viewSearch() {
288
+ return this.ViewSearch;
289
+ }
290
+ /** @deprecated Use {@link ViewSearch}. */
291
+ set viewSearch(value) {
292
+ this.ViewSearch = value;
293
+ }
294
+ SelectedViewId = null;
295
+ /** @deprecated Use {@link SelectedViewId}. */
296
+ get selectedViewId() {
297
+ return this.SelectedViewId;
298
+ }
299
+ /** @deprecated Use {@link SelectedViewId}. */
300
+ set selectedViewId(value) {
301
+ this.SelectedViewId = value;
302
+ }
215
303
  // Adhoc-tab state
216
- adhocEntityName = null;
217
- adhocFilter = '';
218
- loading = false;
304
+ AdhocEntityName = null;
305
+ /** @deprecated Use {@link AdhocEntityName}. */
306
+ get adhocEntityName() {
307
+ return this.AdhocEntityName;
308
+ }
309
+ /** @deprecated Use {@link AdhocEntityName}. */
310
+ set adhocEntityName(value) {
311
+ this.AdhocEntityName = value;
312
+ }
313
+ AdhocFilter = '';
314
+ /** @deprecated Use {@link AdhocFilter}. */
315
+ get adhocFilter() {
316
+ return this.AdhocFilter;
317
+ }
318
+ /** @deprecated Use {@link AdhocFilter}. */
319
+ set adhocFilter(value) {
320
+ this.AdhocFilter = value;
321
+ }
322
+ Loading = false;
323
+ /** @deprecated Use {@link Loading}. */
324
+ get loading() {
325
+ return this.Loading;
326
+ }
327
+ /** @deprecated Use {@link Loading}. */
328
+ set loading(value) {
329
+ this.Loading = value;
330
+ }
219
331
  async ngOnInit() {
220
- this.entityOptions = this.ProviderToUse.Entities
332
+ this.EntityOptions = this.ProviderToUse.Entities
221
333
  .filter((e) => !e.SchemaName.startsWith('sys'))
222
334
  .sort((a, b) => a.Name.localeCompare(b.Name));
223
335
  if (this.LockedEntityName) {
224
- this.selectedEntityName = this.LockedEntityName;
225
- this.adhocEntityName = this.LockedEntityName;
336
+ this.SelectedEntityName = this.LockedEntityName;
337
+ this.AdhocEntityName = this.LockedEntityName;
226
338
  }
227
- else if (this.entityOptions.length > 0) {
228
- this.selectedEntityName = this.entityOptions[0].Name;
229
- this.adhocEntityName = this.selectedEntityName;
339
+ else if (this.EntityOptions.length > 0) {
340
+ this.SelectedEntityName = this.EntityOptions[0].Name;
341
+ this.AdhocEntityName = this.SelectedEntityName;
230
342
  }
231
343
  await this.refreshTabData();
232
344
  }
233
- async setTab(tab) {
234
- this.activeTab = tab;
345
+ async SetTab(tab) {
346
+ this.ActiveTab = tab;
235
347
  this.emitCurrentSource();
236
348
  await this.refreshTabData();
237
349
  }
350
+ /** @deprecated Use {@link SetTab}. */
351
+ async setTab(tab) {
352
+ return this.SetTab(tab);
353
+ }
238
354
  async OnEntityChange(name) {
239
- this.selectedEntityName = name;
240
- this.adhocEntityName = name;
355
+ this.SelectedEntityName = name;
356
+ this.AdhocEntityName = name;
241
357
  // Selecting a new entity invalidates any picked list/view.
242
- this.selectedListId = null;
243
- this.selectedViewId = null;
358
+ this.SelectedListId = null;
359
+ this.SelectedViewId = null;
244
360
  this.emitCurrentSource();
245
361
  await this.refreshTabData();
246
362
  }
@@ -251,11 +367,11 @@ export class AudienceSourcePickerComponent extends BaseAngularComponent {
251
367
  this.recomputeFilteredViews();
252
368
  }
253
369
  OnSelectList(list) {
254
- this.selectedListId = list.ID;
370
+ this.SelectedListId = list.ID;
255
371
  this.emitCurrentSource();
256
372
  }
257
373
  OnSelectView(view) {
258
- this.selectedViewId = view.ID;
374
+ this.SelectedViewId = view.ID;
259
375
  this.emitCurrentSource();
260
376
  }
261
377
  OnAdhocFilterChange() {
@@ -265,21 +381,25 @@ export class AudienceSourcePickerComponent extends BaseAngularComponent {
265
381
  * Build the currently-selected `AudienceSource` from picker state, or
266
382
  * `null` if the picker isn't yet in a complete state.
267
383
  */
268
- get currentSource() {
269
- if (this.activeTab === 'list') {
270
- return this.selectedListId ? { kind: 'list', listId: this.selectedListId } : null;
384
+ get CurrentSource() {
385
+ if (this.ActiveTab === 'list') {
386
+ return this.SelectedListId ? { kind: 'list', listId: this.SelectedListId } : null;
271
387
  }
272
- if (this.activeTab === 'view') {
273
- return this.selectedViewId ? { kind: 'view', viewId: this.selectedViewId } : null;
388
+ if (this.ActiveTab === 'view') {
389
+ return this.SelectedViewId ? { kind: 'view', viewId: this.SelectedViewId } : null;
274
390
  }
275
391
  // adhoc
276
- if (this.adhocEntityName && this.adhocFilter.trim().length > 0) {
277
- return { kind: 'adhoc', entityName: this.adhocEntityName, extraFilter: this.adhocFilter.trim() };
392
+ if (this.AdhocEntityName && this.AdhocFilter.trim().length > 0) {
393
+ return { kind: 'adhoc', entityName: this.AdhocEntityName, extraFilter: this.AdhocFilter.trim() };
278
394
  }
279
395
  return null;
280
396
  }
397
+ /** @deprecated Use {@link CurrentSource}. */
398
+ get currentSource() {
399
+ return this.CurrentSource;
400
+ }
281
401
  emitCurrentSource() {
282
- this._source = this.currentSource;
402
+ this._source = this.CurrentSource;
283
403
  this.SourceChange.emit(this._source);
284
404
  this.cdr.markForCheck();
285
405
  }
@@ -289,15 +409,15 @@ export class AudienceSourcePickerComponent extends BaseAngularComponent {
289
409
  * switching tabs doesn't re-query.
290
410
  */
291
411
  async refreshTabData() {
292
- if (!this.selectedEntityName)
412
+ if (!this.SelectedEntityName)
293
413
  return;
294
- this.loading = true;
414
+ this.Loading = true;
295
415
  this.cdr.markForCheck();
296
416
  try {
297
- const entityInfo = this.ProviderToUse.EntityByName(this.selectedEntityName);
417
+ const entityInfo = this.ProviderToUse.EntityByName(this.SelectedEntityName);
298
418
  if (!entityInfo) {
299
- this.availableLists = [];
300
- this.availableViews = [];
419
+ this.AvailableLists = [];
420
+ this.AvailableViews = [];
301
421
  this.recomputeFilteredLists();
302
422
  this.recomputeFilteredViews();
303
423
  return;
@@ -317,28 +437,28 @@ export class AudienceSourcePickerComponent extends BaseAngularComponent {
317
437
  ResultType: 'entity_object',
318
438
  }),
319
439
  ]);
320
- this.availableLists = lists.Success ? lists.Results ?? [] : [];
321
- this.availableViews = views.Success ? views.Results ?? [] : [];
440
+ this.AvailableLists = lists.Success ? lists.Results ?? [] : [];
441
+ this.AvailableViews = views.Success ? views.Results ?? [] : [];
322
442
  this.recomputeFilteredLists();
323
443
  this.recomputeFilteredViews();
324
444
  }
325
445
  finally {
326
- this.loading = false;
446
+ this.Loading = false;
327
447
  this.cdr.markForCheck();
328
448
  }
329
449
  }
330
450
  recomputeFilteredLists() {
331
- const term = this.listSearch.trim().toLowerCase();
332
- this.filteredLists = term
333
- ? this.availableLists.filter((l) => l.Name.toLowerCase().includes(term))
334
- : this.availableLists;
451
+ const term = this.ListSearch.trim().toLowerCase();
452
+ this.FilteredLists = term
453
+ ? this.AvailableLists.filter((l) => l.Name.toLowerCase().includes(term))
454
+ : this.AvailableLists;
335
455
  this.cdr.markForCheck();
336
456
  }
337
457
  recomputeFilteredViews() {
338
- const term = this.viewSearch.trim().toLowerCase();
339
- this.filteredViews = term
340
- ? this.availableViews.filter((v) => v.Name.toLowerCase().includes(term))
341
- : this.availableViews;
458
+ const term = this.ViewSearch.trim().toLowerCase();
459
+ this.FilteredViews = term
460
+ ? this.AvailableViews.filter((v) => v.Name.toLowerCase().includes(term))
461
+ : this.AvailableViews;
342
462
  this.cdr.markForCheck();
343
463
  }
344
464
  static ɵfac = /*@__PURE__*/ (() => { let ɵAudienceSourcePickerComponent_BaseFactory; return function AudienceSourcePickerComponent_Factory(__ngFactoryType__) { return (ɵAudienceSourcePickerComponent_BaseFactory || (ɵAudienceSourcePickerComponent_BaseFactory = i0.ɵɵgetInheritedFactory(AudienceSourcePickerComponent)))(__ngFactoryType__ || AudienceSourcePickerComponent); }; })();
@@ -1 +1 @@
1
- {"version":3,"file":"audience-source-picker.component.js","sourceRoot":"","sources":["../../../../src/lib/components/audience-source-picker/audience-source-picker.component.ts","../../../../src/lib/components/audience-source-picker/audience-source-picker.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAU,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEnI,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,OAAO,EAAmB,MAAM,sBAAsB,CAAC;;;;;;ICgCxD,iCAA2B;IAAA,YAAY;IAAA,iBAAS;;;IAAxC,mCAAkB;IAAC,cAAY;IAAZ,+BAAY;;;IAezC,+BAAoC;IAClC,iCAA8D;IAChE,iBAAM;;;IAEN,+BAAkE;IAChE,iDACF;IAAA,iBAAM;;;IAeI,+BAAwC;IAAA,YAAmB;IAAA,iBAAM;;;IAAzB,cAAmB;IAAnB,sCAAmB;;;;IAXjE,+BAG4B;IAA1B,2OAAS,yBAAe,KAAC;IACzB,wBAGkD;IAEhD,AADF,+BAAwC,cACE;IAAA,YAAY;IAAA,iBAAM;IAC1D,mIAAqB;IAIzB,AADE,iBAAM,EACF;;;;IAZJ,oFAAiE;IAI/D,cAAiD;IACjD,AADA,oEAAiD,gDACN;IAEH,eAAY;IAAZ,+BAAY;IACpD,cAEC;IAFD,2CAEC;;;IAdT,+BAAoC;IAClC,8HAgBC;IACH,iBAAM;;;IAjBJ,cAgBC;IAhBD,mCAgBC;;;;IAlCL,+BAAqC;IACnC,wBAAkC;IAClC,iCAIwC;IAFtC,0TAAwB;IACxB,iNAAiB,2BAAoB,KAAC;IAE1C,AALE,iBAIwC,EACpC;IASJ,AAJA,AAJF,+GAAe,yFAI0B,yFAIhC;;;IAZL,eAAwB;IAAxB,iDAAwB;IAI5B,cA4BC;IA5BD,gFA4BC;;;IAWC,+BAAoC;IAClC,iCAA8D;IAChE,iBAAM;;;IAEN,+BAAkE;IAChE,iDACF;IAAA,iBAAM;;;IAkBI,+BAAwC;IAAA,YAAmB;IAAA,iBAAM;;;IAAzB,cAAmB;IAAnB,sCAAmB;;;;IAdjE,+BAG4B;IAA1B,2OAAS,yBAAe,KAAC;IACzB,wBAGkD;IAEhD,AADF,+BAAwC,cACE;IACtC,YACA;IAAA,gCAA0C;IAAA,oBAAI;IAChD,AADgD,iBAAO,EACjD;IACN,mIAAqB;IAIzB,AADE,iBAAM,EACF;;;;IAfJ,oFAAiE;IAI/D,cAAiD;IACjD,AADA,oEAAiD,gDACN;IAGzC,eACA;IADA,0CACA;IAEF,eAEC;IAFD,2CAEC;;;IAjBT,+BAAoC;IAClC,8HAmBC;IACH,iBAAM;IACN,+BAAmC;IACjC,wBAAgD;IAChD,+HAEF;IAAA,iBAAM;;;IAzBJ,cAmBC;IAnBD,mCAmBC;;;;IArCL,+BAAqC;IACnC,wBAAkC;IAClC,iCAIwC;IAFtC,0TAAwB;IACxB,iNAAiB,2BAAoB,KAAC;IAE1C,AALE,iBAIwC,EACpC;IASJ,AAJA,AAJF,+GAAe,yFAI0B,8EAIhC;;;IAZL,eAAwB;IAAxB,iDAAwB;IAI5B,cAoCC;IApCD,gFAoCC;;;;IAIC,AADF,8BAAoC,eACI;IAAA,sBAAM;IAAA,iBAAQ;IACpD,oCAKsE;IAFpE,+TAAyB;IACzB,oNAAiB,4BAAqB,KAAC;IAE3C,AADwE,iBAAW,EAC7E;IACN,+BAAkE;IAChE,wBAAuC;IACvC,sMAGF;IAAA,iBAAM;;;IATF,eAAyB;IAAzB,kDAAyB;;ADpGjC,MAAM,OAAO,6BAA8B,SAAQ,oBAAoB;IACpD,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAEjD;;;OAGG;IACH,IACI,MAAM,CAAC,KAA4B;QACrC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,KAAK,EAAE,CAAC;YACV,uDAAuD;YACvD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;YAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;YACrC,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC;gBACxC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACO,OAAO,GAA0B,IAAI,CAAC;IAE9C,uEAAuE;IAC9D,gBAAgB,GAAkB,IAAI,CAAC;IAEtC,YAAY,GAAG,IAAI,YAAY,EAAyB,CAAC;IAE5D,SAAS,GAA4B,MAAM,CAAC;IAC5C,aAAa,GAAiB,EAAE,CAAC;IAExC,iBAAiB;IACV,kBAAkB,GAAkB,IAAI,CAAC;IACzC,cAAc,GAAmB,EAAE,CAAC;IACpC,aAAa,GAAmB,EAAE,CAAC;IACnC,UAAU,GAAG,EAAE,CAAC;IAChB,cAAc,GAAkB,IAAI,CAAC;IAE5C,iBAAiB;IACV,cAAc,GAAuB,EAAE,CAAC;IACxC,aAAa,GAAuB,EAAE,CAAC;IACvC,UAAU,GAAG,EAAE,CAAC;IAChB,cAAc,GAAkB,IAAI,CAAC;IAE5C,kBAAkB;IACX,eAAe,GAAkB,IAAI,CAAC;IACtC,WAAW,GAAG,EAAE,CAAC;IAEjB,OAAO,GAAG,KAAK,CAAC;IAEvB,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ;aAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aAC9C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAChD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC/C,CAAC;aAAM,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACjD,CAAC;QACD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAA4B;QAC9C,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,IAAY;QACtC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,2DAA2D;QAC3D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;IAEM,kBAAkB;QACvB,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAChC,CAAC;IAEM,kBAAkB;QACvB,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAChC,CAAC;IAEM,YAAY,CAAC,IAAkB;QACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEM,YAAY,CAAC,IAAsB;QACxC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEM,mBAAmB;QACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,IAAW,aAAa;QACtB,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACpF,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACpF,CAAC;QACD,QAAQ;QACR,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;QACnG,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO;QACrC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC5E,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;gBACzB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;gBACzB,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC9B,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC9B,OAAO;YACT,CAAC;YACD,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5D,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACvC,EAAE,CAAC,OAAO,CAAe;oBACvB,UAAU,EAAE,WAAW;oBACvB,WAAW,EAAE,aAAa,UAAU,CAAC,EAAE,GAAG;oBAC1C,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,eAAe;iBAC5B,CAAC;gBACF,EAAE,CAAC,OAAO,CAAmB;oBAC3B,UAAU,EAAE,gBAAgB;oBAC5B,WAAW,EAAE,aAAa,UAAU,CAAC,EAAE,GAAG;oBAC1C,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,eAAe;iBAC5B,CAAC;aACH,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAChC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,sBAAsB;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAClD,IAAI,CAAC,aAAa,GAAG,IAAI;YACvB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACxE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAEO,sBAAsB;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAClD,IAAI,CAAC,aAAa,GAAG,IAAI;YACvB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACxE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;iSA5LU,6BAA6B,yBAA7B,6BAA6B;6DAA7B,6BAA6B;YC5BtC,AADF,AAFF,8BAA6B,aAEQ,gBAIN;YAAzB,0GAAS,WAAO,MAAM,CAAC,IAAC;YACxB,uBAAgC;YAChC,sBACF;YAAA,iBAAS;YACT,iCAG2B;YAAzB,0GAAS,WAAO,MAAM,CAAC,IAAC;YACxB,uBAA+B;YAC/B,sBACF;YAAA,iBAAS;YACT,iCAG4B;YAA1B,0GAAS,WAAO,OAAO,CAAC,IAAC;YACzB,uBAAkC;YAClC,gCACF;YACF,AADE,iBAAS,EACL;YAIJ,AADF,+BAAoC,gBACI;YAAA,uBAAM;YAAA,iBAAQ;YACpD,kCAIkC;YADhC,iIAAiB,0BAAsB,IAAC;YAExC,qGAEC;YAEL,AADE,iBAAS,EACL;YAsFJ,AA9CA,AAtCF,uFAA4B,iEAsCO,iEA8C1B;YAkBX,iBAAM;;YAzIA,eAA2D;YAA3D,wEAA2D;YAO3D,eAA2D;YAA3D,wEAA2D;YAO3D,eAA4D;YAA5D,yEAA4D;YAY5D,eAA8B;YAE9B,AAFA,gDAA8B,oCAEC;YAC/B,cAEC;YAFD,gCAEC;YAIL,eAqGC;YArGD,oFAqGC;;;iFD9GU,6BAA6B;cAPzC,SAAS;6BACI,KAAK,YACP,2BAA2B,mBAGpB,uBAAuB,CAAC,MAAM;;kBAS9C,KAAK;;kBAsBL,KAAK;;kBAEL,MAAM;;kFA/BI,6BAA6B","sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, inject } from '@angular/core';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { RunView, type EntityInfo } from '@memberjunction/core';\nimport type { MJListEntity, MJUserViewEntity } from '@memberjunction/core-entities';\nimport type { AudienceSource } from '@memberjunction/lists-base';\n\n/**\n * Reusable picker for an `AudienceSource` (mockup 20). Three tabs:\n *\n * - **List** — pick from saved `MJ: List`s for the chosen entity.\n * - **View** — pick from saved `MJ: User View`s for the chosen entity.\n * Marked \"live\" so the user knows the record set is re-resolved at\n * execution time.\n * - **Ad-hoc Filter** — entity + free-form `ExtraFilter`. Skips\n * server-side validation; the consumer can pre-flight via\n * `ResolveAudience` (Action) or `AudienceResolver.Resolve` if desired.\n *\n * Emits the typed `AudienceSource` via `SourceChange` on selection; the\n * sister `AudienceSourceSummaryComponent` renders the friendly summary.\n * Multi-provider safe via `BaseAngularComponent.ProviderToUse`.\n */\nexport type AudienceSourcePickerTab = 'list' | 'view' | 'adhoc';\n\n@Component({\n standalone: false,\n selector: 'mj-audience-source-picker',\n templateUrl: './audience-source-picker.component.html',\n styleUrls: ['./audience-source-picker.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AudienceSourcePickerComponent extends BaseAngularComponent implements OnInit {\n private readonly cdr = inject(ChangeDetectorRef);\n\n /**\n * Pre-seed the picker with an existing audience. Useful when editing\n * a previously-configured audience on a saved campaign.\n */\n @Input()\n set Source(value: AudienceSource | null) {\n this._source = value;\n if (value) {\n // Pick the right tab + restore the saved field values.\n this.activeTab = value.kind;\n if (value.kind === 'list') {\n this.selectedListId = value.listId;\n } else if (value.kind === 'view') {\n this.selectedViewId = value.viewId;\n } else {\n this.adhocEntityName = value.entityName;\n this.adhocFilter = value.extraFilter;\n }\n }\n }\n get Source(): AudienceSource | null {\n return this._source;\n }\n private _source: AudienceSource | null = null;\n\n /** When set, restrict the entity dropdown to this entity (lock it). */\n @Input() LockedEntityName: string | null = null;\n\n @Output() SourceChange = new EventEmitter<AudienceSource | null>();\n\n public activeTab: AudienceSourcePickerTab = 'list';\n public entityOptions: EntityInfo[] = [];\n\n // List-tab state\n public selectedEntityName: string | null = null;\n public availableLists: MJListEntity[] = [];\n public filteredLists: MJListEntity[] = [];\n public listSearch = '';\n public selectedListId: string | null = null;\n\n // View-tab state\n public availableViews: MJUserViewEntity[] = [];\n public filteredViews: MJUserViewEntity[] = [];\n public viewSearch = '';\n public selectedViewId: string | null = null;\n\n // Adhoc-tab state\n public adhocEntityName: string | null = null;\n public adhocFilter = '';\n\n public loading = false;\n\n async ngOnInit(): Promise<void> {\n this.entityOptions = this.ProviderToUse.Entities\n .filter((e) => !e.SchemaName.startsWith('sys'))\n .sort((a, b) => a.Name.localeCompare(b.Name));\n if (this.LockedEntityName) {\n this.selectedEntityName = this.LockedEntityName;\n this.adhocEntityName = this.LockedEntityName;\n } else if (this.entityOptions.length > 0) {\n this.selectedEntityName = this.entityOptions[0].Name;\n this.adhocEntityName = this.selectedEntityName;\n }\n await this.refreshTabData();\n }\n\n public async setTab(tab: AudienceSourcePickerTab): Promise<void> {\n this.activeTab = tab;\n this.emitCurrentSource();\n await this.refreshTabData();\n }\n\n public async OnEntityChange(name: string): Promise<void> {\n this.selectedEntityName = name;\n this.adhocEntityName = name;\n // Selecting a new entity invalidates any picked list/view.\n this.selectedListId = null;\n this.selectedViewId = null;\n this.emitCurrentSource();\n await this.refreshTabData();\n }\n\n public OnListSearchChange(): void {\n this.recomputeFilteredLists();\n }\n\n public OnViewSearchChange(): void {\n this.recomputeFilteredViews();\n }\n\n public OnSelectList(list: MJListEntity): void {\n this.selectedListId = list.ID;\n this.emitCurrentSource();\n }\n\n public OnSelectView(view: MJUserViewEntity): void {\n this.selectedViewId = view.ID;\n this.emitCurrentSource();\n }\n\n public OnAdhocFilterChange(): void {\n this.emitCurrentSource();\n }\n\n /**\n * Build the currently-selected `AudienceSource` from picker state, or\n * `null` if the picker isn't yet in a complete state.\n */\n public get currentSource(): AudienceSource | null {\n if (this.activeTab === 'list') {\n return this.selectedListId ? { kind: 'list', listId: this.selectedListId } : null;\n }\n if (this.activeTab === 'view') {\n return this.selectedViewId ? { kind: 'view', viewId: this.selectedViewId } : null;\n }\n // adhoc\n if (this.adhocEntityName && this.adhocFilter.trim().length > 0) {\n return { kind: 'adhoc', entityName: this.adhocEntityName, extraFilter: this.adhocFilter.trim() };\n }\n return null;\n }\n\n private emitCurrentSource(): void {\n this._source = this.currentSource;\n this.SourceChange.emit(this._source);\n this.cdr.markForCheck();\n }\n\n /**\n * Pull lists or views for the current tab from the server. We\n * intentionally batch the (list, view) pair on entity change so\n * switching tabs doesn't re-query.\n */\n private async refreshTabData(): Promise<void> {\n if (!this.selectedEntityName) return;\n this.loading = true;\n this.cdr.markForCheck();\n try {\n const entityInfo = this.ProviderToUse.EntityByName(this.selectedEntityName);\n if (!entityInfo) {\n this.availableLists = [];\n this.availableViews = [];\n this.recomputeFilteredLists();\n this.recomputeFilteredViews();\n return;\n }\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const [lists, views] = await Promise.all([\n rv.RunView<MJListEntity>({\n EntityName: 'MJ: Lists',\n ExtraFilter: `EntityID='${entityInfo.ID}'`,\n OrderBy: 'Name',\n ResultType: 'entity_object',\n }),\n rv.RunView<MJUserViewEntity>({\n EntityName: 'MJ: User Views',\n ExtraFilter: `EntityID='${entityInfo.ID}'`,\n OrderBy: 'Name',\n ResultType: 'entity_object',\n }),\n ]);\n this.availableLists = lists.Success ? lists.Results ?? [] : [];\n this.availableViews = views.Success ? views.Results ?? [] : [];\n this.recomputeFilteredLists();\n this.recomputeFilteredViews();\n } finally {\n this.loading = false;\n this.cdr.markForCheck();\n }\n }\n\n private recomputeFilteredLists(): void {\n const term = this.listSearch.trim().toLowerCase();\n this.filteredLists = term\n ? this.availableLists.filter((l) => l.Name.toLowerCase().includes(term))\n : this.availableLists;\n this.cdr.markForCheck();\n }\n\n private recomputeFilteredViews(): void {\n const term = this.viewSearch.trim().toLowerCase();\n this.filteredViews = term\n ? this.availableViews.filter((v) => v.Name.toLowerCase().includes(term))\n : this.availableViews;\n this.cdr.markForCheck();\n }\n}\n","<div class=\"audience-picker\">\n <!-- Tab strip -->\n <div class=\"audience-picker__tabs\">\n <button\n class=\"audience-picker__tab\"\n [class.audience-picker__tab--active]=\"activeTab === 'list'\"\n (click)=\"setTab('list')\">\n <i class=\"fa-solid fa-list\"></i>\n List\n </button>\n <button\n class=\"audience-picker__tab\"\n [class.audience-picker__tab--active]=\"activeTab === 'view'\"\n (click)=\"setTab('view')\">\n <i class=\"fa-solid fa-eye\"></i>\n View\n </button>\n <button\n class=\"audience-picker__tab\"\n [class.audience-picker__tab--active]=\"activeTab === 'adhoc'\"\n (click)=\"setTab('adhoc')\">\n <i class=\"fa-solid fa-filter\"></i>\n Ad-hoc Filter\n </button>\n </div>\n\n <!-- Entity selector (shared across tabs) -->\n <div class=\"audience-picker__field\">\n <label class=\"audience-picker__label\">Entity</label>\n <select\n class=\"mj-input mj-select audience-picker__entity\"\n [ngModel]=\"selectedEntityName\"\n (ngModelChange)=\"OnEntityChange($event)\"\n [disabled]=\"!!LockedEntityName\">\n @for (e of entityOptions; track e.ID) {\n <option [ngValue]=\"e.Name\">{{ e.Name }}</option>\n }\n </select>\n </div>\n\n @if (activeTab === 'list') {\n <div class=\"audience-picker__search\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n class=\"mj-input\"\n [(ngModel)]=\"listSearch\"\n (ngModelChange)=\"OnListSearchChange()\"\n placeholder=\"Search lists by name…\" />\n </div>\n @if (loading) {\n <div class=\"audience-picker__state\">\n <mj-loading text=\"Loading lists...\" size=\"small\"></mj-loading>\n </div>\n } @else if (filteredLists.length === 0) {\n <div class=\"audience-picker__state audience-picker__state--empty\">\n No lists found for this entity.\n </div>\n } @else {\n <div class=\"audience-picker__items\">\n @for (l of filteredLists; track l.ID) {\n <div\n class=\"audience-picker__item\"\n [class.audience-picker__item--selected]=\"selectedListId === l.ID\"\n (click)=\"OnSelectList(l)\">\n <i\n class=\"fa-solid\"\n [class.fa-circle-check]=\"selectedListId === l.ID\"\n [class.fa-circle]=\"selectedListId !== l.ID\"></i>\n <div class=\"audience-picker__item-body\">\n <div class=\"audience-picker__item-name\">{{ l.Name }}</div>\n @if (l.Description) {\n <div class=\"audience-picker__item-desc\">{{ l.Description }}</div>\n }\n </div>\n </div>\n }\n </div>\n }\n } @else if (activeTab === 'view') {\n <div class=\"audience-picker__search\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n class=\"mj-input\"\n [(ngModel)]=\"viewSearch\"\n (ngModelChange)=\"OnViewSearchChange()\"\n placeholder=\"Search views by name…\" />\n </div>\n @if (loading) {\n <div class=\"audience-picker__state\">\n <mj-loading text=\"Loading views...\" size=\"small\"></mj-loading>\n </div>\n } @else if (filteredViews.length === 0) {\n <div class=\"audience-picker__state audience-picker__state--empty\">\n No views found for this entity.\n </div>\n } @else {\n <div class=\"audience-picker__items\">\n @for (v of filteredViews; track v.ID) {\n <div\n class=\"audience-picker__item\"\n [class.audience-picker__item--selected]=\"selectedViewId === v.ID\"\n (click)=\"OnSelectView(v)\">\n <i\n class=\"fa-solid\"\n [class.fa-circle-check]=\"selectedViewId === v.ID\"\n [class.fa-circle]=\"selectedViewId !== v.ID\"></i>\n <div class=\"audience-picker__item-body\">\n <div class=\"audience-picker__item-name\">\n {{ v.Name }}\n <span class=\"audience-picker__live-badge\">live</span>\n </div>\n @if (v.Description) {\n <div class=\"audience-picker__item-desc\">{{ v.Description }}</div>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"audience-picker__hint\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n A view is resolved live at execution — the record set may differ from\n what you see here if data changes.\n </div>\n }\n } @else {\n <!-- Ad-hoc filter tab -->\n <div class=\"audience-picker__field\">\n <label class=\"audience-picker__label\">Filter</label>\n <textarea\n class=\"mj-input audience-picker__filter\"\n rows=\"3\"\n [(ngModel)]=\"adhocFilter\"\n (ngModelChange)=\"OnAdhocFilterChange()\"\n placeholder=\"e.g. State IN ('CA','NY','TX') AND DonationCount >= 3\"></textarea>\n </div>\n <div class=\"audience-picker__hint audience-picker__hint--neutral\">\n <i class=\"fa-solid fa-circle-info\"></i>\n Ad-hoc filters are evaluated server-side at execution time. Validate the\n filter on the server (via the resolve-audience action or send preview)\n before relying on it for production.\n </div>\n }\n</div>\n"]}
1
+ {"version":3,"file":"audience-source-picker.component.js","sourceRoot":"","sources":["../../../../src/lib/components/audience-source-picker/audience-source-picker.component.ts","../../../../src/lib/components/audience-source-picker/audience-source-picker.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, inject } from '@angular/core';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { RunView, type EntityInfo } from '@memberjunction/core';\nimport type { MJListEntity, MJUserViewEntity } from '@memberjunction/core-entities';\nimport type { AudienceSource } from '@memberjunction/lists-base';\n\n/**\n * Reusable picker for an `AudienceSource` (mockup 20). Three tabs:\n *\n * - **List** — pick from saved `MJ: List`s for the chosen entity.\n * - **View** — pick from saved `MJ: User View`s for the chosen entity.\n * Marked \"live\" so the user knows the record set is re-resolved at\n * execution time.\n * - **Ad-hoc Filter** — entity + free-form `ExtraFilter`. Skips\n * server-side validation; the consumer can pre-flight via\n * `ResolveAudience` (Action) or `AudienceResolver.Resolve` if desired.\n *\n * Emits the typed `AudienceSource` via `SourceChange` on selection; the\n * sister `AudienceSourceSummaryComponent` renders the friendly summary.\n * Multi-provider safe via `BaseAngularComponent.ProviderToUse`.\n */\nexport type AudienceSourcePickerTab = 'list' | 'view' | 'adhoc';\n\n@Component({\n standalone: false,\n selector: 'mj-audience-source-picker',\n templateUrl: './audience-source-picker.component.html',\n styleUrls: ['./audience-source-picker.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AudienceSourcePickerComponent extends BaseAngularComponent implements OnInit {\n private readonly cdr = inject(ChangeDetectorRef);\n\n /**\n * Pre-seed the picker with an existing audience. Useful when editing\n * a previously-configured audience on a saved campaign.\n */\n @Input()\n set Source(value: AudienceSource | null) {\n this._source = value;\n if (value) {\n // Pick the right tab + restore the saved field values.\n this.ActiveTab = value.kind;\n if (value.kind === 'list') {\n this.SelectedListId = value.listId;\n } else if (value.kind === 'view') {\n this.SelectedViewId = value.viewId;\n } else {\n this.AdhocEntityName = value.entityName;\n this.AdhocFilter = value.extraFilter;\n }\n }\n }\n get Source(): AudienceSource | null {\n return this._source;\n }\n private _source: AudienceSource | null = null;\n\n /** When set, restrict the entity dropdown to this entity (lock it). */\n @Input() LockedEntityName: string | null = null;\n\n @Output() SourceChange = new EventEmitter<AudienceSource | null>();\n\n public ActiveTab: AudienceSourcePickerTab = 'list';\n\n /** @deprecated Use {@link ActiveTab}. */\n public get activeTab(): AudienceSourcePickerTab {\n return this.ActiveTab;\n }\n /** @deprecated Use {@link ActiveTab}. */\n public set activeTab(value: AudienceSourcePickerTab) {\n this.ActiveTab = value;\n }\n public EntityOptions: EntityInfo[] = [];\n\n /** @deprecated Use {@link EntityOptions}. */\n public get entityOptions(): EntityInfo[] {\n return this.EntityOptions;\n }\n /** @deprecated Use {@link EntityOptions}. */\n public set entityOptions(value: EntityInfo[]) {\n this.EntityOptions = value;\n }\n\n // List-tab state\n public SelectedEntityName: string | null = null;\n\n /** @deprecated Use {@link SelectedEntityName}. */\n public get selectedEntityName(): string | null {\n return this.SelectedEntityName;\n }\n /** @deprecated Use {@link SelectedEntityName}. */\n public set selectedEntityName(value: string | null) {\n this.SelectedEntityName = value;\n }\n public AvailableLists: MJListEntity[] = [];\n\n /** @deprecated Use {@link AvailableLists}. */\n public get availableLists(): MJListEntity[] {\n return this.AvailableLists;\n }\n /** @deprecated Use {@link AvailableLists}. */\n public set availableLists(value: MJListEntity[]) {\n this.AvailableLists = value;\n }\n public FilteredLists: MJListEntity[] = [];\n\n /** @deprecated Use {@link FilteredLists}. */\n public get filteredLists(): MJListEntity[] {\n return this.FilteredLists;\n }\n /** @deprecated Use {@link FilteredLists}. */\n public set filteredLists(value: MJListEntity[]) {\n this.FilteredLists = value;\n }\n public ListSearch = '';\n\n /** @deprecated Use {@link ListSearch}. */\n public get listSearch() {\n return this.ListSearch;\n }\n /** @deprecated Use {@link ListSearch}. */\n public set listSearch(value) {\n this.ListSearch = value;\n }\n public SelectedListId: string | null = null;\n\n /** @deprecated Use {@link SelectedListId}. */\n public get selectedListId(): string | null {\n return this.SelectedListId;\n }\n /** @deprecated Use {@link SelectedListId}. */\n public set selectedListId(value: string | null) {\n this.SelectedListId = value;\n }\n\n // View-tab state\n public AvailableViews: MJUserViewEntity[] = [];\n\n /** @deprecated Use {@link AvailableViews}. */\n public get availableViews(): MJUserViewEntity[] {\n return this.AvailableViews;\n }\n /** @deprecated Use {@link AvailableViews}. */\n public set availableViews(value: MJUserViewEntity[]) {\n this.AvailableViews = value;\n }\n public FilteredViews: MJUserViewEntity[] = [];\n\n /** @deprecated Use {@link FilteredViews}. */\n public get filteredViews(): MJUserViewEntity[] {\n return this.FilteredViews;\n }\n /** @deprecated Use {@link FilteredViews}. */\n public set filteredViews(value: MJUserViewEntity[]) {\n this.FilteredViews = value;\n }\n public ViewSearch = '';\n\n /** @deprecated Use {@link ViewSearch}. */\n public get viewSearch() {\n return this.ViewSearch;\n }\n /** @deprecated Use {@link ViewSearch}. */\n public set viewSearch(value) {\n this.ViewSearch = value;\n }\n public SelectedViewId: string | null = null;\n\n /** @deprecated Use {@link SelectedViewId}. */\n public get selectedViewId(): string | null {\n return this.SelectedViewId;\n }\n /** @deprecated Use {@link SelectedViewId}. */\n public set selectedViewId(value: string | null) {\n this.SelectedViewId = value;\n }\n\n // Adhoc-tab state\n public AdhocEntityName: string | null = null;\n\n /** @deprecated Use {@link AdhocEntityName}. */\n public get adhocEntityName(): string | null {\n return this.AdhocEntityName;\n }\n /** @deprecated Use {@link AdhocEntityName}. */\n public set adhocEntityName(value: string | null) {\n this.AdhocEntityName = value;\n }\n public AdhocFilter = '';\n\n /** @deprecated Use {@link AdhocFilter}. */\n public get adhocFilter() {\n return this.AdhocFilter;\n }\n /** @deprecated Use {@link AdhocFilter}. */\n public set adhocFilter(value) {\n this.AdhocFilter = value;\n }\n\n public Loading = false;\n\n /** @deprecated Use {@link Loading}. */\n public get loading() {\n return this.Loading;\n }\n /** @deprecated Use {@link Loading}. */\n public set loading(value) {\n this.Loading = value;\n }\n\n async ngOnInit(): Promise<void> {\n this.EntityOptions = this.ProviderToUse.Entities\n .filter((e) => !e.SchemaName.startsWith('sys'))\n .sort((a, b) => a.Name.localeCompare(b.Name));\n if (this.LockedEntityName) {\n this.SelectedEntityName = this.LockedEntityName;\n this.AdhocEntityName = this.LockedEntityName;\n } else if (this.EntityOptions.length > 0) {\n this.SelectedEntityName = this.EntityOptions[0].Name;\n this.AdhocEntityName = this.SelectedEntityName;\n }\n await this.refreshTabData();\n }\n\n public async SetTab(tab: AudienceSourcePickerTab): Promise<void> {\n this.ActiveTab = tab;\n this.emitCurrentSource();\n await this.refreshTabData();\n }\n\n /** @deprecated Use {@link SetTab}. */\n public async setTab(tab: AudienceSourcePickerTab): Promise<void> {\n return this.SetTab(tab);\n }\n\n public async OnEntityChange(name: string): Promise<void> {\n this.SelectedEntityName = name;\n this.AdhocEntityName = name;\n // Selecting a new entity invalidates any picked list/view.\n this.SelectedListId = null;\n this.SelectedViewId = null;\n this.emitCurrentSource();\n await this.refreshTabData();\n }\n\n public OnListSearchChange(): void {\n this.recomputeFilteredLists();\n }\n\n public OnViewSearchChange(): void {\n this.recomputeFilteredViews();\n }\n\n public OnSelectList(list: MJListEntity): void {\n this.SelectedListId = list.ID;\n this.emitCurrentSource();\n }\n\n public OnSelectView(view: MJUserViewEntity): void {\n this.SelectedViewId = view.ID;\n this.emitCurrentSource();\n }\n\n public OnAdhocFilterChange(): void {\n this.emitCurrentSource();\n }\n\n /**\n * Build the currently-selected `AudienceSource` from picker state, or\n * `null` if the picker isn't yet in a complete state.\n */\n public get CurrentSource(): AudienceSource | null {\n if (this.ActiveTab === 'list') {\n return this.SelectedListId ? { kind: 'list', listId: this.SelectedListId } : null;\n }\n if (this.ActiveTab === 'view') {\n return this.SelectedViewId ? { kind: 'view', viewId: this.SelectedViewId } : null;\n }\n // adhoc\n if (this.AdhocEntityName && this.AdhocFilter.trim().length > 0) {\n return { kind: 'adhoc', entityName: this.AdhocEntityName, extraFilter: this.AdhocFilter.trim() };\n }\n return null;\n }\n\n /** @deprecated Use {@link CurrentSource}. */\n public get currentSource(): AudienceSource | null {\n return this.CurrentSource;\n }\n\n private emitCurrentSource(): void {\n this._source = this.CurrentSource;\n this.SourceChange.emit(this._source);\n this.cdr.markForCheck();\n }\n\n /**\n * Pull lists or views for the current tab from the server. We\n * intentionally batch the (list, view) pair on entity change so\n * switching tabs doesn't re-query.\n */\n private async refreshTabData(): Promise<void> {\n if (!this.SelectedEntityName) return;\n this.Loading = true;\n this.cdr.markForCheck();\n try {\n const entityInfo = this.ProviderToUse.EntityByName(this.SelectedEntityName);\n if (!entityInfo) {\n this.AvailableLists = [];\n this.AvailableViews = [];\n this.recomputeFilteredLists();\n this.recomputeFilteredViews();\n return;\n }\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const [lists, views] = await Promise.all([\n rv.RunView<MJListEntity>({\n EntityName: 'MJ: Lists',\n ExtraFilter: `EntityID='${entityInfo.ID}'`,\n OrderBy: 'Name',\n ResultType: 'entity_object',\n }),\n rv.RunView<MJUserViewEntity>({\n EntityName: 'MJ: User Views',\n ExtraFilter: `EntityID='${entityInfo.ID}'`,\n OrderBy: 'Name',\n ResultType: 'entity_object',\n }),\n ]);\n this.AvailableLists = lists.Success ? lists.Results ?? [] : [];\n this.AvailableViews = views.Success ? views.Results ?? [] : [];\n this.recomputeFilteredLists();\n this.recomputeFilteredViews();\n } finally {\n this.Loading = false;\n this.cdr.markForCheck();\n }\n }\n\n private recomputeFilteredLists(): void {\n const term = this.ListSearch.trim().toLowerCase();\n this.FilteredLists = term\n ? this.AvailableLists.filter((l) => l.Name.toLowerCase().includes(term))\n : this.AvailableLists;\n this.cdr.markForCheck();\n }\n\n private recomputeFilteredViews(): void {\n const term = this.ViewSearch.trim().toLowerCase();\n this.FilteredViews = term\n ? this.AvailableViews.filter((v) => v.Name.toLowerCase().includes(term))\n : this.AvailableViews;\n this.cdr.markForCheck();\n }\n}\n","<div class=\"audience-picker\">\n <!-- Tab strip -->\n <div class=\"audience-picker__tabs\">\n <button\n class=\"audience-picker__tab\"\n [class.audience-picker__tab--active]=\"activeTab === 'list'\"\n (click)=\"setTab('list')\">\n <i class=\"fa-solid fa-list\"></i>\n List\n </button>\n <button\n class=\"audience-picker__tab\"\n [class.audience-picker__tab--active]=\"activeTab === 'view'\"\n (click)=\"setTab('view')\">\n <i class=\"fa-solid fa-eye\"></i>\n View\n </button>\n <button\n class=\"audience-picker__tab\"\n [class.audience-picker__tab--active]=\"activeTab === 'adhoc'\"\n (click)=\"setTab('adhoc')\">\n <i class=\"fa-solid fa-filter\"></i>\n Ad-hoc Filter\n </button>\n </div>\n\n <!-- Entity selector (shared across tabs) -->\n <div class=\"audience-picker__field\">\n <label class=\"audience-picker__label\">Entity</label>\n <select\n class=\"mj-input mj-select audience-picker__entity\"\n [ngModel]=\"selectedEntityName\"\n (ngModelChange)=\"OnEntityChange($event)\"\n [disabled]=\"!!LockedEntityName\">\n @for (e of entityOptions; track e.ID) {\n <option [ngValue]=\"e.Name\">{{ e.Name }}</option>\n }\n </select>\n </div>\n\n @if (activeTab === 'list') {\n <div class=\"audience-picker__search\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n class=\"mj-input\"\n [(ngModel)]=\"listSearch\"\n (ngModelChange)=\"OnListSearchChange()\"\n placeholder=\"Search lists by name…\" />\n </div>\n @if (loading) {\n <div class=\"audience-picker__state\">\n <mj-loading text=\"Loading lists...\" size=\"small\"></mj-loading>\n </div>\n } @else if (filteredLists.length === 0) {\n <div class=\"audience-picker__state audience-picker__state--empty\">\n No lists found for this entity.\n </div>\n } @else {\n <div class=\"audience-picker__items\">\n @for (l of filteredLists; track l.ID) {\n <div\n class=\"audience-picker__item\"\n [class.audience-picker__item--selected]=\"selectedListId === l.ID\"\n (click)=\"OnSelectList(l)\">\n <i\n class=\"fa-solid\"\n [class.fa-circle-check]=\"selectedListId === l.ID\"\n [class.fa-circle]=\"selectedListId !== l.ID\"></i>\n <div class=\"audience-picker__item-body\">\n <div class=\"audience-picker__item-name\">{{ l.Name }}</div>\n @if (l.Description) {\n <div class=\"audience-picker__item-desc\">{{ l.Description }}</div>\n }\n </div>\n </div>\n }\n </div>\n }\n } @else if (activeTab === 'view') {\n <div class=\"audience-picker__search\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n class=\"mj-input\"\n [(ngModel)]=\"viewSearch\"\n (ngModelChange)=\"OnViewSearchChange()\"\n placeholder=\"Search views by name…\" />\n </div>\n @if (loading) {\n <div class=\"audience-picker__state\">\n <mj-loading text=\"Loading views...\" size=\"small\"></mj-loading>\n </div>\n } @else if (filteredViews.length === 0) {\n <div class=\"audience-picker__state audience-picker__state--empty\">\n No views found for this entity.\n </div>\n } @else {\n <div class=\"audience-picker__items\">\n @for (v of filteredViews; track v.ID) {\n <div\n class=\"audience-picker__item\"\n [class.audience-picker__item--selected]=\"selectedViewId === v.ID\"\n (click)=\"OnSelectView(v)\">\n <i\n class=\"fa-solid\"\n [class.fa-circle-check]=\"selectedViewId === v.ID\"\n [class.fa-circle]=\"selectedViewId !== v.ID\"></i>\n <div class=\"audience-picker__item-body\">\n <div class=\"audience-picker__item-name\">\n {{ v.Name }}\n <span class=\"audience-picker__live-badge\">live</span>\n </div>\n @if (v.Description) {\n <div class=\"audience-picker__item-desc\">{{ v.Description }}</div>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"audience-picker__hint\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n A view is resolved live at execution — the record set may differ from\n what you see here if data changes.\n </div>\n }\n } @else {\n <!-- Ad-hoc filter tab -->\n <div class=\"audience-picker__field\">\n <label class=\"audience-picker__label\">Filter</label>\n <textarea\n class=\"mj-input audience-picker__filter\"\n rows=\"3\"\n [(ngModel)]=\"adhocFilter\"\n (ngModelChange)=\"OnAdhocFilterChange()\"\n placeholder=\"e.g. State IN ('CA','NY','TX') AND DonationCount >= 3\"></textarea>\n </div>\n <div class=\"audience-picker__hint audience-picker__hint--neutral\">\n <i class=\"fa-solid fa-circle-info\"></i>\n Ad-hoc filters are evaluated server-side at execution time. Validate the\n filter on the server (via the resolve-audience action or send preview)\n before relying on it for production.\n </div>\n }\n</div>\n"]}
@@ -18,7 +18,13 @@ export declare class AudienceSourceSummaryComponent extends BaseAngularComponent
18
18
  /** Optional pre-computed count to surface (e.g., from a prior resolve). */
19
19
  RecordCount: number | null;
20
20
  label: string | null;
21
- icon: string;
21
+ Icon: string;
22
+ /** @deprecated Use {@link Icon}. */
23
+ get icon(): string;
24
+ /** @deprecated Use {@link Icon}. */
25
+ set icon(value: string);
26
+ get KindLabel(): string;
27
+ /** @deprecated Use {@link KindLabel}. */
22
28
  get kindLabel(): string;
23
29
  /**
24
30
  * Resolve a human-readable label for the source. Names are looked up
@@ -1 +1 @@
1
- {"version":3,"file":"audience-source-summary.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/audience-source-summary/audience-source-summary.component.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;;AAEjE;;;;;;;;GAQG;AACH,qBAOa,8BAA+B,SAAQ,oBAAoB;IACtE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6B;IAEjD,IACI,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,EAItC;IACD,IAAI,MAAM,IAAI,cAAc,GAAG,IAAI,CAElC;IACD,OAAO,CAAC,OAAO,CAA+B;IAE9C,2EAA2E;IAClE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEpC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5B,IAAI,SAA0B;IAErC,IAAW,SAAS,IAAI,MAAM,CAK7B;IAED;;;;;OAKG;YACW,YAAY;IAyB1B,OAAO,CAAC,QAAQ;yCA1DL,8BAA8B;2CAA9B,8BAA8B;CA6D1C"}
1
+ {"version":3,"file":"audience-source-summary.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/audience-source-summary/audience-source-summary.component.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;;AAEjE;;;;;;;;GAQG;AACH,qBAOa,8BAA+B,SAAQ,oBAAoB;IACtE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6B;IAEjD,IACI,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,EAItC;IACD,IAAI,MAAM,IAAI,cAAc,GAAG,IAAI,CAElC;IACD,OAAO,CAAC,OAAO,CAA+B;IAE9C,2EAA2E;IAClE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEpC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5B,IAAI,SAA0B;IAErC,oCAAoC;IACpC,IAAW,IAAI,WAEd;IACD,oCAAoC;IACpC,IAAW,IAAI,CAAC,KAAK,QAAA,EAEpB;IAED,IAAW,SAAS,IAAI,MAAM,CAK7B;IAED,yCAAyC;IACzC,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED;;;;;OAKG;YACW,YAAY;IAyB1B,OAAO,CAAC,QAAQ;yCAxEL,8BAA8B;2CAA9B,8BAA8B;CA2E1C"}
@@ -70,8 +70,16 @@ export class AudienceSourceSummaryComponent extends BaseAngularComponent {
70
70
  /** Optional pre-computed count to surface (e.g., from a prior resolve). */
71
71
  RecordCount = null;
72
72
  label = null;
73
- icon = 'fa-solid fa-bullseye';
74
- get kindLabel() {
73
+ Icon = 'fa-solid fa-bullseye';
74
+ /** @deprecated Use {@link Icon}. */
75
+ get icon() {
76
+ return this.Icon;
77
+ }
78
+ /** @deprecated Use {@link Icon}. */
79
+ set icon(value) {
80
+ this.Icon = value;
81
+ }
82
+ get KindLabel() {
75
83
  if (!this._source)
76
84
  return '';
77
85
  if (this._source.kind === 'list')
@@ -80,6 +88,10 @@ export class AudienceSourceSummaryComponent extends BaseAngularComponent {
80
88
  return 'View';
81
89
  return 'Ad-hoc Filter';
82
90
  }
91
+ /** @deprecated Use {@link KindLabel}. */
92
+ get kindLabel() {
93
+ return this.KindLabel;
94
+ }
83
95
  /**
84
96
  * Resolve a human-readable label for the source. Names are looked up
85
97
  * one-at-a-time; cheap because each picker change fires at most once.
@@ -94,17 +106,17 @@ export class AudienceSourceSummaryComponent extends BaseAngularComponent {
94
106
  const list = await md.GetEntityObject('MJ: Lists', this.ProviderToUse.CurrentUser ?? undefined);
95
107
  const loaded = await list.Load(source.listId);
96
108
  this.label = loaded ? list.Name : source.listId;
97
- this.icon = 'fa-solid fa-list';
109
+ this.Icon = 'fa-solid fa-list';
98
110
  }
99
111
  else if (source.kind === 'view') {
100
112
  const view = await md.GetEntityObject('MJ: User Views', this.ProviderToUse.CurrentUser ?? undefined);
101
113
  const loaded = await view.Load(source.viewId);
102
114
  this.label = loaded ? view.Name : source.viewId;
103
- this.icon = 'fa-solid fa-eye';
115
+ this.Icon = 'fa-solid fa-eye';
104
116
  }
105
117
  else {
106
118
  this.label = `${source.entityName} — ${this.truncate(source.extraFilter, 80)}`;
107
- this.icon = 'fa-solid fa-filter';
119
+ this.Icon = 'fa-solid fa-filter';
108
120
  }
109
121
  }
110
122
  catch {