@memberjunction/ng-list-management 6.1.4 → 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
@@ -1 +1 @@
1
- {"version":3,"file":"list-invitations.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/list-invitations/list-invitations.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgE,MAAM,EAAU,MAAM,eAAe,CAAC;AAE7G,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAKrE;;;;;;;;;;GAUG;AAEH,KAAK,gBAAgB,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAEvE,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAOa,wBAAyB,SAAQ,oBAAqB,YAAW,MAAM;IAClF,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6B;IAEjD,IACI,MAAM,IAAI,MAAM,GAAG,IAAI,CAE1B;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAK9B;IACD,OAAO,CAAC,OAAO,CAAuB;IAEtC,yEAAyE;IAChE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEjC,SAAS,EAAE,gBAAgB,CAAa;IACxC,WAAW,EAAE,aAAa,EAAE,CAAM;IAEzC;;;;;;OAMG;IACI,kBAAkB,EAAE,aAAa,EAAE,CAAM;IACzC,OAAO,UAAS;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IACnC,UAAU,UAAS;IAGnB,QAAQ,SAAM;IACd,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAY;IACxC,WAAW,SAAO;IAEzB,OAAO,CAAC,WAAW,CAAS;IAEtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKxB,MAAM,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAM1C;;;;;;;;OAQG;IACH,OAAO,CAAC,2BAA2B;IAU5B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM;IAW1C,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM;IASpC,IAAW,OAAO,IAAI,OAAO,CAE5B;IAEY,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B/B,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxD;;;;OAIG;IACU,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAiBxC,eAAe;yCA3JlB,wBAAwB;2CAAxB,wBAAwB;CAiMpC"}
1
+ {"version":3,"file":"list-invitations.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/list-invitations/list-invitations.component.ts"],"names":[],"mappings":"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"}
@@ -148,8 +148,24 @@ export class ListInvitationsComponent extends BaseAngularComponent {
148
148
  _listId = null;
149
149
  /** Optional display name for the list — used in the empty-state copy. */
150
150
  ListName = null;
151
- activeTab = 'Pending';
152
- invitations = [];
151
+ ActiveTab = 'Pending';
152
+ /** @deprecated Use {@link ActiveTab}. */
153
+ get activeTab() {
154
+ return this.ActiveTab;
155
+ }
156
+ /** @deprecated Use {@link ActiveTab}. */
157
+ set activeTab(value) {
158
+ this.ActiveTab = value;
159
+ }
160
+ Invitations = [];
161
+ /** @deprecated Use {@link Invitations}. */
162
+ get invitations() {
163
+ return this.Invitations;
164
+ }
165
+ /** @deprecated Use {@link Invitations}. */
166
+ set invitations(value) {
167
+ this.Invitations = value;
168
+ }
153
169
  /**
154
170
  * Precomputed list of invitations matching the active tab, recomputed only when
155
171
  * the source data ({@link invitations}) or {@link activeTab} changes (see
@@ -157,25 +173,77 @@ export class ListInvitationsComponent extends BaseAngularComponent {
157
173
  * Bound directly as the @for source in the template, so a getter here would
158
174
  * allocate a fresh array (map + filter) every CD tick.
159
175
  */
160
- visibleInvitations = [];
161
- loading = false;
176
+ VisibleInvitations = [];
177
+ /** @deprecated Use {@link VisibleInvitations}. */
178
+ get visibleInvitations() {
179
+ return this.VisibleInvitations;
180
+ }
181
+ /** @deprecated Use {@link VisibleInvitations}. */
182
+ set visibleInvitations(value) {
183
+ this.VisibleInvitations = value;
184
+ }
185
+ Loading = false;
186
+ /** @deprecated Use {@link Loading}. */
187
+ get loading() {
188
+ return this.Loading;
189
+ }
190
+ /** @deprecated Use {@link Loading}. */
191
+ set loading(value) {
192
+ this.Loading = value;
193
+ }
162
194
  errorMessage = null;
163
- submitting = false;
195
+ Submitting = false;
196
+ /** @deprecated Use {@link Submitting}. */
197
+ get submitting() {
198
+ return this.Submitting;
199
+ }
200
+ /** @deprecated Use {@link Submitting}. */
201
+ set submitting(value) {
202
+ this.Submitting = value;
203
+ }
164
204
  // Send-new-invitation form
165
- newEmail = '';
166
- newRole = 'Viewer';
167
- newTtlHours = 168; // 7 days default
205
+ NewEmail = '';
206
+ /** @deprecated Use {@link NewEmail}. */
207
+ get newEmail() {
208
+ return this.NewEmail;
209
+ }
210
+ /** @deprecated Use {@link NewEmail}. */
211
+ set newEmail(value) {
212
+ this.NewEmail = value;
213
+ }
214
+ NewRole = 'Viewer';
215
+ /** @deprecated Use {@link NewRole}. */
216
+ get newRole() {
217
+ return this.NewRole;
218
+ }
219
+ /** @deprecated Use {@link NewRole}. */
220
+ set newRole(value) {
221
+ this.NewRole = value;
222
+ }
223
+ NewTtlHours = 168;
224
+ /** @deprecated Use {@link NewTtlHours}. */
225
+ get newTtlHours() {
226
+ return this.NewTtlHours;
227
+ }
228
+ /** @deprecated Use {@link NewTtlHours}. */
229
+ set newTtlHours(value) {
230
+ this.NewTtlHours = value;
231
+ } // 7 days default
168
232
  initialized = false;
169
233
  async ngOnInit() {
170
234
  this.initialized = true;
171
235
  if (this._listId)
172
236
  await this.loadInvitations();
173
237
  }
174
- setTab(tab) {
175
- this.activeTab = tab;
238
+ SetTab(tab) {
239
+ this.ActiveTab = tab;
176
240
  this.recomputeVisibleInvitations();
177
241
  this.cdr.markForCheck();
178
242
  }
243
+ /** @deprecated Use {@link SetTab}. */
244
+ setTab(tab) {
245
+ return this.SetTab(tab);
246
+ }
179
247
  /**
180
248
  * Recompute the precomputed {@link visibleInvitations} array. Called only when
181
249
  * the source data or the active tab changes — keeping the per-row hydration
@@ -187,22 +255,26 @@ export class ListInvitationsComponent extends BaseAngularComponent {
187
255
  */
188
256
  recomputeVisibleInvitations() {
189
257
  const now = Date.now();
190
- const hydrated = this.invitations.map((inv) => inv.Status === 'Pending' && inv.ExpiresAt.getTime() < now
258
+ const hydrated = this.Invitations.map((inv) => inv.Status === 'Pending' && inv.ExpiresAt.getTime() < now
191
259
  ? { ...inv, Status: 'Expired' }
192
260
  : inv);
193
- this.visibleInvitations = hydrated.filter((i) => i.Status === this.activeTab);
261
+ this.VisibleInvitations = hydrated.filter((i) => i.Status === this.ActiveTab);
194
262
  }
195
- countFor(status) {
263
+ CountFor(status) {
196
264
  const now = Date.now();
197
265
  let count = 0;
198
- for (const inv of this.invitations) {
266
+ for (const inv of this.Invitations) {
199
267
  const effective = inv.Status === 'Pending' && inv.ExpiresAt.getTime() < now ? 'Expired' : inv.Status;
200
268
  if (effective === status)
201
269
  count++;
202
270
  }
203
271
  return count;
204
272
  }
205
- formatExpiry(d) {
273
+ /** @deprecated Use {@link CountFor}. */
274
+ countFor(status) {
275
+ return this.CountFor(status);
276
+ }
277
+ FormatExpiry(d) {
206
278
  const diff = d.getTime() - Date.now();
207
279
  if (diff < 0)
208
280
  return `expired ${d.toLocaleDateString()}`;
@@ -212,25 +284,33 @@ export class ListInvitationsComponent extends BaseAngularComponent {
212
284
  const days = Math.floor(hours / 24);
213
285
  return `expires in ${days}d`;
214
286
  }
287
+ /** @deprecated Use {@link FormatExpiry}. */
288
+ formatExpiry(d) {
289
+ return this.FormatExpiry(d);
290
+ }
291
+ get CanSend() {
292
+ return !!this._listId && this.NewEmail.trim().length > 0 && this.NewEmail.includes('@') && !this.Submitting;
293
+ }
294
+ /** @deprecated Use {@link CanSend}. */
215
295
  get canSend() {
216
- return !!this._listId && this.newEmail.trim().length > 0 && this.newEmail.includes('@') && !this.submitting;
296
+ return this.CanSend;
217
297
  }
218
298
  async SendInvitation() {
219
- if (!this.canSend || !this._listId)
299
+ if (!this.CanSend || !this._listId)
220
300
  return;
221
- this.submitting = true;
301
+ this.Submitting = true;
222
302
  this.cdr.markForCheck();
223
303
  try {
224
304
  const provider = this.ProviderToUse;
225
305
  const client = new GraphQLListsClient(provider);
226
306
  const result = await client.Invite({
227
307
  ListID: this._listId,
228
- Email: this.newEmail.trim(),
229
- Role: this.newRole,
230
- TtlHours: this.newTtlHours,
308
+ Email: this.NewEmail.trim(),
309
+ Role: this.NewRole,
310
+ TtlHours: this.NewTtlHours,
231
311
  });
232
312
  if (result.Success) {
233
- this.newEmail = '';
313
+ this.NewEmail = '';
234
314
  await this.loadInvitations();
235
315
  }
236
316
  else {
@@ -241,7 +321,7 @@ export class ListInvitationsComponent extends BaseAngularComponent {
241
321
  this.errorMessage = e instanceof Error ? e.message : String(e);
242
322
  }
243
323
  finally {
244
- this.submitting = false;
324
+ this.Submitting = false;
245
325
  this.cdr.markForCheck();
246
326
  }
247
327
  }
@@ -283,7 +363,7 @@ export class ListInvitationsComponent extends BaseAngularComponent {
283
363
  async loadInvitations() {
284
364
  if (!this._listId)
285
365
  return;
286
- this.loading = true;
366
+ this.Loading = true;
287
367
  this.errorMessage = null;
288
368
  this.cdr.markForCheck();
289
369
  try {
@@ -296,11 +376,11 @@ export class ListInvitationsComponent extends BaseAngularComponent {
296
376
  });
297
377
  if (!result.Success) {
298
378
  this.errorMessage = result.ErrorMessage ?? 'Failed to load invitations';
299
- this.invitations = [];
379
+ this.Invitations = [];
300
380
  this.recomputeVisibleInvitations();
301
381
  return;
302
382
  }
303
- this.invitations = (result.Results ?? []).map((r) => ({
383
+ this.Invitations = (result.Results ?? []).map((r) => ({
304
384
  ID: String(r.ID),
305
385
  Email: String(r.Email),
306
386
  Role: r.Role,
@@ -313,11 +393,11 @@ export class ListInvitationsComponent extends BaseAngularComponent {
313
393
  }
314
394
  catch (e) {
315
395
  this.errorMessage = e instanceof Error ? e.message : String(e);
316
- this.invitations = [];
396
+ this.Invitations = [];
317
397
  this.recomputeVisibleInvitations();
318
398
  }
319
399
  finally {
320
- this.loading = false;
400
+ this.Loading = false;
321
401
  this.cdr.markForCheck();
322
402
  }
323
403
  }
@@ -1 +1 @@
1
- {"version":3,"file":"list-invitations.component.js","sourceRoot":"","sources":["../../../../src/lib/components/list-invitations/list-invitations.component.ts","../../../../src/lib/components/list-invitations/list-invitations.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, inject } from '@angular/core';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { RunView } from '@memberjunction/core';\nimport type { MJListInvitationEntity } from '@memberjunction/core-entities';\nimport { GraphQLDataProvider, GraphQLListsClient } from '@memberjunction/graphql-dataprovider';\n\n/**\n * Invitations management UI (mockup 16). For a single List:\n * - Pending / Accepted / Expired / Revoked tabs.\n * - Send new invitation form (email + role + TTL).\n * - Revoke / Resend actions on Pending invites.\n *\n * Reads invitations directly via `RunView` (cheaper than going through\n * GraphQL — the entity is already accessible). Mutations route through\n * `GraphQLListsClient` so the audit-log + notification side effects\n * fire server-side.\n */\n\ntype InvitationStatus = 'Pending' | 'Accepted' | 'Expired' | 'Revoked';\n\ninterface InvitationRow {\n ID: string;\n Email: string;\n Role: 'Editor' | 'Viewer';\n Status: InvitationStatus;\n ExpiresAt: Date;\n CreatedAt: Date;\n Token: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-list-invitations',\n templateUrl: './list-invitations.component.html',\n styleUrls: ['./list-invitations.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListInvitationsComponent extends BaseAngularComponent implements OnInit {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input()\n get ListID(): string | null {\n return this._listId;\n }\n set ListID(value: string | null) {\n if (this._listId !== value) {\n this._listId = value;\n if (this.initialized && value) void this.loadInvitations();\n }\n }\n private _listId: string | null = null;\n\n /** Optional display name for the list — used in the empty-state copy. */\n @Input() ListName: string | null = null;\n\n public activeTab: InvitationStatus = 'Pending';\n public invitations: InvitationRow[] = [];\n\n /**\n * Precomputed list of invitations matching the active tab, recomputed only when\n * the source data ({@link invitations}) or {@link activeTab} changes (see\n * {@link recomputeVisibleInvitations}) — NOT on every change-detection cycle.\n * Bound directly as the @for source in the template, so a getter here would\n * allocate a fresh array (map + filter) every CD tick.\n */\n public visibleInvitations: InvitationRow[] = [];\n public loading = false;\n public errorMessage: string | null = null;\n public submitting = false;\n\n // Send-new-invitation form\n public newEmail = '';\n public newRole: 'Editor' | 'Viewer' = 'Viewer';\n public newTtlHours = 168; // 7 days default\n\n private initialized = false;\n\n async ngOnInit(): Promise<void> {\n this.initialized = true;\n if (this._listId) await this.loadInvitations();\n }\n\n public setTab(tab: InvitationStatus): void {\n this.activeTab = tab;\n this.recomputeVisibleInvitations();\n this.cdr.markForCheck();\n }\n\n /**\n * Recompute the precomputed {@link visibleInvitations} array. Called only when\n * the source data or the active tab changes — keeping the per-row hydration\n * (map) + filter out of the per-CD-cycle hot path.\n *\n * We hydrate Status=\"Pending\" rows whose ExpiresAt is in the past as Expired\n * on the client so users see them without waiting for a server-side flip. The\n * server's Accept path also lazily marks them.\n */\n private recomputeVisibleInvitations(): void {\n const now = Date.now();\n const hydrated = this.invitations.map<InvitationRow>((inv) =>\n inv.Status === 'Pending' && inv.ExpiresAt.getTime() < now\n ? { ...inv, Status: 'Expired' }\n : inv,\n );\n this.visibleInvitations = hydrated.filter((i) => i.Status === this.activeTab);\n }\n\n public countFor(status: InvitationStatus): number {\n const now = Date.now();\n let count = 0;\n for (const inv of this.invitations) {\n const effective: InvitationStatus =\n inv.Status === 'Pending' && inv.ExpiresAt.getTime() < now ? 'Expired' : inv.Status;\n if (effective === status) count++;\n }\n return count;\n }\n\n public formatExpiry(d: Date): string {\n const diff = d.getTime() - Date.now();\n if (diff < 0) return `expired ${d.toLocaleDateString()}`;\n const hours = Math.floor(diff / 3_600_000);\n if (hours < 24) return `expires in ${hours}h`;\n const days = Math.floor(hours / 24);\n return `expires in ${days}d`;\n }\n\n public get canSend(): boolean {\n return !!this._listId && this.newEmail.trim().length > 0 && this.newEmail.includes('@') && !this.submitting;\n }\n\n public async SendInvitation(): Promise<void> {\n if (!this.canSend || !this._listId) return;\n this.submitting = true;\n this.cdr.markForCheck();\n try {\n const provider = this.ProviderToUse as unknown as GraphQLDataProvider;\n const client = new GraphQLListsClient(provider);\n const result = await client.Invite({\n ListID: this._listId,\n Email: this.newEmail.trim(),\n Role: this.newRole,\n TtlHours: this.newTtlHours,\n });\n if (result.Success) {\n this.newEmail = '';\n await this.loadInvitations();\n } else {\n this.errorMessage = `Failed to send: ${result.Message}`;\n }\n } catch (e) {\n this.errorMessage = e instanceof Error ? e.message : String(e);\n } finally {\n this.submitting = false;\n this.cdr.markForCheck();\n }\n }\n\n public async Revoke(invitationId: string): Promise<void> {\n const provider = this.ProviderToUse as unknown as GraphQLDataProvider;\n const client = new GraphQLListsClient(provider);\n const result = await client.RevokeInvitation(invitationId);\n if (result.Success) {\n await this.loadInvitations();\n } else {\n this.errorMessage = `Failed to revoke: ${result.Message}`;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * \"Resend\" = create a fresh invitation for the same email + role. The\n * old one stays Pending until either accepted or expired; users see\n * both in the Pending tab until one is consumed.\n */\n public async Resend(inv: InvitationRow): Promise<void> {\n const provider = this.ProviderToUse as unknown as GraphQLDataProvider;\n const client = new GraphQLListsClient(provider);\n if (!this._listId) return;\n const result = await client.Invite({\n ListID: this._listId,\n Email: inv.Email,\n Role: inv.Role,\n TtlHours: 168,\n });\n if (result.Success) await this.loadInvitations();\n else {\n this.errorMessage = `Failed to resend: ${result.Message}`;\n this.cdr.markForCheck();\n }\n }\n\n private async loadInvitations(): Promise<void> {\n if (!this._listId) return;\n this.loading = true;\n this.errorMessage = null;\n this.cdr.markForCheck();\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJListInvitationEntity>({\n EntityName: 'MJ: List Invitations',\n ExtraFilter: `ListID='${this._listId.replace(/'/g, \"''\")}'`,\n OrderBy: '__mj_CreatedAt DESC',\n ResultType: 'simple',\n });\n if (!result.Success) {\n this.errorMessage = result.ErrorMessage ?? 'Failed to load invitations';\n this.invitations = [];\n this.recomputeVisibleInvitations();\n return;\n }\n this.invitations = (result.Results ?? []).map((r) => ({\n ID: String(r.ID),\n Email: String(r.Email),\n Role: r.Role as 'Editor' | 'Viewer',\n Status: r.Status as InvitationStatus,\n ExpiresAt: new Date(r.ExpiresAt as unknown as string),\n CreatedAt: new Date(r.__mj_CreatedAt as unknown as string),\n Token: String(r.Token),\n }));\n this.recomputeVisibleInvitations();\n } catch (e) {\n this.errorMessage = e instanceof Error ? e.message : String(e);\n this.invitations = [];\n this.recomputeVisibleInvitations();\n } finally {\n this.loading = false;\n this.cdr.markForCheck();\n }\n }\n}\n","<div class=\"invitations\">\n <!-- Send new invitation -->\n <div class=\"invitation-send\">\n <div class=\"invitation-send__heading\">Send invitation</div>\n <form class=\"invitation-send__form\" (submit)=\"$event.preventDefault(); SendInvitation()\">\n <input\n class=\"mj-input invitation-send__email\"\n type=\"email\"\n [(ngModel)]=\"newEmail\"\n name=\"newEmail\"\n placeholder=\"recipient@example.com\"\n required />\n <select class=\"mj-input mj-select invitation-send__role\" [(ngModel)]=\"newRole\" name=\"newRole\">\n <option value=\"Viewer\">Viewer</option>\n <option value=\"Editor\">Editor</option>\n </select>\n <input\n class=\"mj-input invitation-send__ttl\"\n type=\"number\"\n [(ngModel)]=\"newTtlHours\"\n name=\"newTtlHours\"\n title=\"Hours until expiry\"\n min=\"1\"\n max=\"720\" />\n <button mjButton variant=\"primary\" type=\"submit\" [disabled]=\"!canSend\">\n @if (submitting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-paper-plane\"></i>\n }\n {{ submitting ? 'Sending…' : 'Send' }}\n </button>\n </form>\n </div>\n\n @if (errorMessage) {\n <div class=\"invitation-error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n {{ errorMessage }}\n </div>\n }\n\n <!-- Status tabs -->\n <div class=\"invitation-tabs\">\n @for (s of ['Pending', 'Accepted', 'Expired', 'Revoked']; track s) {\n <button\n class=\"invitation-tab\"\n [class.invitation-tab--active]=\"activeTab === s\"\n (click)=\"setTab($any(s))\">\n {{ s }}\n <span class=\"invitation-tab__count\">{{ countFor($any(s)) }}</span>\n </button>\n }\n </div>\n\n @if (loading) {\n <div class=\"invitation-state\">\n <mj-loading text=\"Loading invitations...\" size=\"medium\"></mj-loading>\n </div>\n } @else if (visibleInvitations.length === 0) {\n <div class=\"invitation-state invitation-state--empty\">\n <i class=\"fa-solid fa-envelope\"></i>\n <span>No {{ activeTab.toLowerCase() }} invitations.</span>\n </div>\n } @else {\n <table class=\"invitation-table\">\n <thead>\n <tr>\n <th>Email</th>\n <th>Role</th>\n <th>Sent</th>\n <th>Expiry</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (inv of visibleInvitations; track inv.ID) {\n <tr>\n <td>{{ inv.Email }}</td>\n <td>\n <span class=\"role-chip\" [class.role-chip--editor]=\"inv.Role === 'Editor'\">\n {{ inv.Role }}\n </span>\n </td>\n <td>{{ inv.CreatedAt.toLocaleDateString() }}</td>\n <td>{{ formatExpiry(inv.ExpiresAt) }}</td>\n <td class=\"invitation-actions\">\n @if (activeTab === 'Pending') {\n <button mjButton size=\"sm\" variant=\"outline\" (click)=\"Resend(inv)\" title=\"Send a fresh invitation\">\n <i class=\"fa-solid fa-paper-plane\"></i>\n Resend\n </button>\n <button mjButton size=\"sm\" variant=\"danger\" (click)=\"Revoke(inv.ID)\">\n <i class=\"fa-solid fa-xmark\"></i>\n Revoke\n </button>\n } @else if (activeTab === 'Expired') {\n <button mjButton size=\"sm\" variant=\"outline\" (click)=\"Resend(inv)\">\n <i class=\"fa-solid fa-rotate-right\"></i>\n Re-send\n </button>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n</div>\n"]}
1
+ {"version":3,"file":"list-invitations.component.js","sourceRoot":"","sources":["../../../../src/lib/components/list-invitations/list-invitations.component.ts","../../../../src/lib/components/list-invitations/list-invitations.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, inject } from '@angular/core';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { RunView } from '@memberjunction/core';\nimport type { MJListInvitationEntity } from '@memberjunction/core-entities';\nimport { GraphQLDataProvider, GraphQLListsClient } from '@memberjunction/graphql-dataprovider';\n\n/**\n * Invitations management UI (mockup 16). For a single List:\n * - Pending / Accepted / Expired / Revoked tabs.\n * - Send new invitation form (email + role + TTL).\n * - Revoke / Resend actions on Pending invites.\n *\n * Reads invitations directly via `RunView` (cheaper than going through\n * GraphQL — the entity is already accessible). Mutations route through\n * `GraphQLListsClient` so the audit-log + notification side effects\n * fire server-side.\n */\n\ntype InvitationStatus = 'Pending' | 'Accepted' | 'Expired' | 'Revoked';\n\ninterface InvitationRow {\n ID: string;\n Email: string;\n Role: 'Editor' | 'Viewer';\n Status: InvitationStatus;\n ExpiresAt: Date;\n CreatedAt: Date;\n Token: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-list-invitations',\n templateUrl: './list-invitations.component.html',\n styleUrls: ['./list-invitations.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListInvitationsComponent extends BaseAngularComponent implements OnInit {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input()\n get ListID(): string | null {\n return this._listId;\n }\n set ListID(value: string | null) {\n if (this._listId !== value) {\n this._listId = value;\n if (this.initialized && value) void this.loadInvitations();\n }\n }\n private _listId: string | null = null;\n\n /** Optional display name for the list — used in the empty-state copy. */\n @Input() ListName: string | null = null;\n\n public ActiveTab: InvitationStatus = 'Pending';\n\n /** @deprecated Use {@link ActiveTab}. */\n public get activeTab(): InvitationStatus {\n return this.ActiveTab;\n }\n /** @deprecated Use {@link ActiveTab}. */\n public set activeTab(value: InvitationStatus) {\n this.ActiveTab = value;\n }\n public Invitations: InvitationRow[] = [];\n\n /** @deprecated Use {@link Invitations}. */\n public get invitations(): InvitationRow[] {\n return this.Invitations;\n }\n /** @deprecated Use {@link Invitations}. */\n public set invitations(value: InvitationRow[]) {\n this.Invitations = value;\n }\n\n /**\n * Precomputed list of invitations matching the active tab, recomputed only when\n * the source data ({@link invitations}) or {@link activeTab} changes (see\n * {@link recomputeVisibleInvitations}) — NOT on every change-detection cycle.\n * Bound directly as the @for source in the template, so a getter here would\n * allocate a fresh array (map + filter) every CD tick.\n */\n public VisibleInvitations: InvitationRow[] = [];\n\n /** @deprecated Use {@link VisibleInvitations}. */\n public get visibleInvitations(): InvitationRow[] {\n return this.VisibleInvitations;\n }\n /** @deprecated Use {@link VisibleInvitations}. */\n public set visibleInvitations(value: InvitationRow[]) {\n this.VisibleInvitations = value;\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 public errorMessage: string | null = null;\n public Submitting = false;\n\n /** @deprecated Use {@link Submitting}. */\n public get submitting() {\n return this.Submitting;\n }\n /** @deprecated Use {@link Submitting}. */\n public set submitting(value) {\n this.Submitting = value;\n }\n\n // Send-new-invitation form\n public NewEmail = '';\n\n /** @deprecated Use {@link NewEmail}. */\n public get newEmail() {\n return this.NewEmail;\n }\n /** @deprecated Use {@link NewEmail}. */\n public set newEmail(value) {\n this.NewEmail = value;\n }\n public NewRole: 'Editor' | 'Viewer' = 'Viewer';\n\n /** @deprecated Use {@link NewRole}. */\n public get newRole(): 'Editor' | 'Viewer' {\n return this.NewRole;\n }\n /** @deprecated Use {@link NewRole}. */\n public set newRole(value: 'Editor' | 'Viewer') {\n this.NewRole = value;\n }\n public NewTtlHours = 168;\n\n /** @deprecated Use {@link NewTtlHours}. */\n public get newTtlHours() {\n return this.NewTtlHours;\n }\n /** @deprecated Use {@link NewTtlHours}. */\n public set newTtlHours(value) {\n this.NewTtlHours = value;\n } // 7 days default\n\n private initialized = false;\n\n async ngOnInit(): Promise<void> {\n this.initialized = true;\n if (this._listId) await this.loadInvitations();\n }\n\n public SetTab(tab: InvitationStatus): void {\n this.ActiveTab = tab;\n this.recomputeVisibleInvitations();\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link SetTab}. */\n public setTab(tab: InvitationStatus): void {\n return this.SetTab(tab);\n }\n\n /**\n * Recompute the precomputed {@link visibleInvitations} array. Called only when\n * the source data or the active tab changes — keeping the per-row hydration\n * (map) + filter out of the per-CD-cycle hot path.\n *\n * We hydrate Status=\"Pending\" rows whose ExpiresAt is in the past as Expired\n * on the client so users see them without waiting for a server-side flip. The\n * server's Accept path also lazily marks them.\n */\n private recomputeVisibleInvitations(): void {\n const now = Date.now();\n const hydrated = this.Invitations.map<InvitationRow>((inv) =>\n inv.Status === 'Pending' && inv.ExpiresAt.getTime() < now\n ? { ...inv, Status: 'Expired' }\n : inv,\n );\n this.VisibleInvitations = hydrated.filter((i) => i.Status === this.ActiveTab);\n }\n\n public CountFor(status: InvitationStatus): number {\n const now = Date.now();\n let count = 0;\n for (const inv of this.Invitations) {\n const effective: InvitationStatus =\n inv.Status === 'Pending' && inv.ExpiresAt.getTime() < now ? 'Expired' : inv.Status;\n if (effective === status) count++;\n }\n return count;\n }\n\n /** @deprecated Use {@link CountFor}. */\n public countFor(status: InvitationStatus): number {\n return this.CountFor(status);\n }\n\n public FormatExpiry(d: Date): string {\n const diff = d.getTime() - Date.now();\n if (diff < 0) return `expired ${d.toLocaleDateString()}`;\n const hours = Math.floor(diff / 3_600_000);\n if (hours < 24) return `expires in ${hours}h`;\n const days = Math.floor(hours / 24);\n return `expires in ${days}d`;\n }\n\n /** @deprecated Use {@link FormatExpiry}. */\n public formatExpiry(d: Date): string {\n return this.FormatExpiry(d);\n }\n\n public get CanSend(): boolean {\n return !!this._listId && this.NewEmail.trim().length > 0 && this.NewEmail.includes('@') && !this.Submitting;\n }\n\n /** @deprecated Use {@link CanSend}. */\n public get canSend(): boolean {\n return this.CanSend;\n }\n\n public async SendInvitation(): Promise<void> {\n if (!this.CanSend || !this._listId) return;\n this.Submitting = true;\n this.cdr.markForCheck();\n try {\n const provider = this.ProviderToUse as unknown as GraphQLDataProvider;\n const client = new GraphQLListsClient(provider);\n const result = await client.Invite({\n ListID: this._listId,\n Email: this.NewEmail.trim(),\n Role: this.NewRole,\n TtlHours: this.NewTtlHours,\n });\n if (result.Success) {\n this.NewEmail = '';\n await this.loadInvitations();\n } else {\n this.errorMessage = `Failed to send: ${result.Message}`;\n }\n } catch (e) {\n this.errorMessage = e instanceof Error ? e.message : String(e);\n } finally {\n this.Submitting = false;\n this.cdr.markForCheck();\n }\n }\n\n public async Revoke(invitationId: string): Promise<void> {\n const provider = this.ProviderToUse as unknown as GraphQLDataProvider;\n const client = new GraphQLListsClient(provider);\n const result = await client.RevokeInvitation(invitationId);\n if (result.Success) {\n await this.loadInvitations();\n } else {\n this.errorMessage = `Failed to revoke: ${result.Message}`;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * \"Resend\" = create a fresh invitation for the same email + role. The\n * old one stays Pending until either accepted or expired; users see\n * both in the Pending tab until one is consumed.\n */\n public async Resend(inv: InvitationRow): Promise<void> {\n const provider = this.ProviderToUse as unknown as GraphQLDataProvider;\n const client = new GraphQLListsClient(provider);\n if (!this._listId) return;\n const result = await client.Invite({\n ListID: this._listId,\n Email: inv.Email,\n Role: inv.Role,\n TtlHours: 168,\n });\n if (result.Success) await this.loadInvitations();\n else {\n this.errorMessage = `Failed to resend: ${result.Message}`;\n this.cdr.markForCheck();\n }\n }\n\n private async loadInvitations(): Promise<void> {\n if (!this._listId) return;\n this.Loading = true;\n this.errorMessage = null;\n this.cdr.markForCheck();\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJListInvitationEntity>({\n EntityName: 'MJ: List Invitations',\n ExtraFilter: `ListID='${this._listId.replace(/'/g, \"''\")}'`,\n OrderBy: '__mj_CreatedAt DESC',\n ResultType: 'simple',\n });\n if (!result.Success) {\n this.errorMessage = result.ErrorMessage ?? 'Failed to load invitations';\n this.Invitations = [];\n this.recomputeVisibleInvitations();\n return;\n }\n this.Invitations = (result.Results ?? []).map((r) => ({\n ID: String(r.ID),\n Email: String(r.Email),\n Role: r.Role as 'Editor' | 'Viewer',\n Status: r.Status as InvitationStatus,\n ExpiresAt: new Date(r.ExpiresAt as unknown as string),\n CreatedAt: new Date(r.__mj_CreatedAt as unknown as string),\n Token: String(r.Token),\n }));\n this.recomputeVisibleInvitations();\n } catch (e) {\n this.errorMessage = e instanceof Error ? e.message : String(e);\n this.Invitations = [];\n this.recomputeVisibleInvitations();\n } finally {\n this.Loading = false;\n this.cdr.markForCheck();\n }\n }\n}\n","<div class=\"invitations\">\n <!-- Send new invitation -->\n <div class=\"invitation-send\">\n <div class=\"invitation-send__heading\">Send invitation</div>\n <form class=\"invitation-send__form\" (submit)=\"$event.preventDefault(); SendInvitation()\">\n <input\n class=\"mj-input invitation-send__email\"\n type=\"email\"\n [(ngModel)]=\"newEmail\"\n name=\"newEmail\"\n placeholder=\"recipient@example.com\"\n required />\n <select class=\"mj-input mj-select invitation-send__role\" [(ngModel)]=\"newRole\" name=\"newRole\">\n <option value=\"Viewer\">Viewer</option>\n <option value=\"Editor\">Editor</option>\n </select>\n <input\n class=\"mj-input invitation-send__ttl\"\n type=\"number\"\n [(ngModel)]=\"newTtlHours\"\n name=\"newTtlHours\"\n title=\"Hours until expiry\"\n min=\"1\"\n max=\"720\" />\n <button mjButton variant=\"primary\" type=\"submit\" [disabled]=\"!canSend\">\n @if (submitting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-paper-plane\"></i>\n }\n {{ submitting ? 'Sending…' : 'Send' }}\n </button>\n </form>\n </div>\n\n @if (errorMessage) {\n <div class=\"invitation-error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n {{ errorMessage }}\n </div>\n }\n\n <!-- Status tabs -->\n <div class=\"invitation-tabs\">\n @for (s of ['Pending', 'Accepted', 'Expired', 'Revoked']; track s) {\n <button\n class=\"invitation-tab\"\n [class.invitation-tab--active]=\"activeTab === s\"\n (click)=\"setTab($any(s))\">\n {{ s }}\n <span class=\"invitation-tab__count\">{{ countFor($any(s)) }}</span>\n </button>\n }\n </div>\n\n @if (loading) {\n <div class=\"invitation-state\">\n <mj-loading text=\"Loading invitations...\" size=\"medium\"></mj-loading>\n </div>\n } @else if (visibleInvitations.length === 0) {\n <div class=\"invitation-state invitation-state--empty\">\n <i class=\"fa-solid fa-envelope\"></i>\n <span>No {{ activeTab.toLowerCase() }} invitations.</span>\n </div>\n } @else {\n <table class=\"invitation-table\">\n <thead>\n <tr>\n <th>Email</th>\n <th>Role</th>\n <th>Sent</th>\n <th>Expiry</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (inv of visibleInvitations; track inv.ID) {\n <tr>\n <td>{{ inv.Email }}</td>\n <td>\n <span class=\"role-chip\" [class.role-chip--editor]=\"inv.Role === 'Editor'\">\n {{ inv.Role }}\n </span>\n </td>\n <td>{{ inv.CreatedAt.toLocaleDateString() }}</td>\n <td>{{ formatExpiry(inv.ExpiresAt) }}</td>\n <td class=\"invitation-actions\">\n @if (activeTab === 'Pending') {\n <button mjButton size=\"sm\" variant=\"outline\" (click)=\"Resend(inv)\" title=\"Send a fresh invitation\">\n <i class=\"fa-solid fa-paper-plane\"></i>\n Resend\n </button>\n <button mjButton size=\"sm\" variant=\"danger\" (click)=\"Revoke(inv.ID)\">\n <i class=\"fa-solid fa-xmark\"></i>\n Revoke\n </button>\n } @else if (activeTab === 'Expired') {\n <button mjButton size=\"sm\" variant=\"outline\" (click)=\"Resend(inv)\">\n <i class=\"fa-solid fa-rotate-right\"></i>\n Re-send\n </button>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n</div>\n"]}
@@ -33,7 +33,11 @@ export declare class ListManagementDialogComponent extends BaseAngularComponent
33
33
  /**
34
34
  * Controls dialog visibility
35
35
  */
36
+ get Visible(): boolean;
37
+ set Visible(value: boolean);
38
+ /** @deprecated Use {@link Visible}. */
36
39
  get visible(): boolean;
40
+ /** @deprecated Use {@link Visible}. */
37
41
  set visible(value: boolean);
38
42
  private _visible;
39
43
  /** Set on each closed→open transition; cleared once init actually runs (requires config). */
@@ -43,27 +47,91 @@ export declare class ListManagementDialogComponent extends BaseAngularComponent
43
47
  /**
44
48
  * Emitted when dialog is closed with results
45
49
  */
50
+ Complete: EventEmitter<ListManagementResult>;
51
+ /**
52
+ * @deprecated Use {@link Complete}.
53
+ *
54
+ * The same emitter under the old binding name, so a template still binding
55
+ * (complete) keeps working. Must stay AFTER Complete: class fields
56
+ * initialise in order, and the other way round this captures undefined.
57
+ */
46
58
  complete: EventEmitter<ListManagementResult>;
47
59
  /**
48
60
  * Emitted when dialog is cancelled
49
61
  */
50
62
  cancel: EventEmitter<void>;
51
- loading: boolean;
63
+ Loading: boolean;
64
+ /** @deprecated Use {@link Loading}. */
65
+ get loading(): boolean;
66
+ /** @deprecated Use {@link Loading}. */
67
+ set loading(value: boolean);
52
68
  saving: boolean;
53
- searchText: string;
54
- activeTab: ListFilterTab;
55
- sortOption: ListSortOption;
56
- showCreateForm: boolean;
57
- allLists: ListItemViewModel[];
58
- filteredLists: ListItemViewModel[];
59
- categories: MJListCategoryEntity[];
60
- newListName: string;
61
- newListDescription: string;
62
- newListCategoryId: string | null;
69
+ SearchText: string;
70
+ /** @deprecated Use {@link SearchText}. */
71
+ get searchText(): string;
72
+ /** @deprecated Use {@link SearchText}. */
73
+ set searchText(value: string);
74
+ ActiveTab: ListFilterTab;
75
+ /** @deprecated Use {@link ActiveTab}. */
76
+ get activeTab(): ListFilterTab;
77
+ /** @deprecated Use {@link ActiveTab}. */
78
+ set activeTab(value: ListFilterTab);
79
+ SortOption: ListSortOption;
80
+ /** @deprecated Use {@link SortOption}. */
81
+ get sortOption(): ListSortOption;
82
+ /** @deprecated Use {@link SortOption}. */
83
+ set sortOption(value: ListSortOption);
84
+ ShowCreateForm: boolean;
85
+ /** @deprecated Use {@link ShowCreateForm}. */
86
+ get showCreateForm(): boolean;
87
+ /** @deprecated Use {@link ShowCreateForm}. */
88
+ set showCreateForm(value: boolean);
89
+ AllLists: ListItemViewModel[];
90
+ /** @deprecated Use {@link AllLists}. */
91
+ get allLists(): ListItemViewModel[];
92
+ /** @deprecated Use {@link AllLists}. */
93
+ set allLists(value: ListItemViewModel[]);
94
+ FilteredLists: ListItemViewModel[];
95
+ /** @deprecated Use {@link FilteredLists}. */
96
+ get filteredLists(): ListItemViewModel[];
97
+ /** @deprecated Use {@link FilteredLists}. */
98
+ set filteredLists(value: ListItemViewModel[]);
99
+ Categories: MJListCategoryEntity[];
100
+ /** @deprecated Use {@link Categories}. */
101
+ get categories(): MJListCategoryEntity[];
102
+ /** @deprecated Use {@link Categories}. */
103
+ set categories(value: MJListCategoryEntity[]);
104
+ NewListName: string;
105
+ /** @deprecated Use {@link NewListName}. */
106
+ get newListName(): string;
107
+ /** @deprecated Use {@link NewListName}. */
108
+ set newListName(value: string);
109
+ NewListDescription: string;
110
+ /** @deprecated Use {@link NewListDescription}. */
111
+ get newListDescription(): string;
112
+ /** @deprecated Use {@link NewListDescription}. */
113
+ set newListDescription(value: string);
114
+ NewListCategoryId: string | null;
115
+ /** @deprecated Use {@link NewListCategoryId}. */
116
+ get newListCategoryId(): string | null;
117
+ /** @deprecated Use {@link NewListCategoryId}. */
118
+ set newListCategoryId(value: string | null);
63
119
  private originalMembership;
64
- addedToLists: Set<string>;
65
- removedFromLists: Set<string>;
66
- newlyCreatedLists: MJListEntity[];
120
+ AddedToLists: Set<string>;
121
+ /** @deprecated Use {@link AddedToLists}. */
122
+ get addedToLists(): Set<string>;
123
+ /** @deprecated Use {@link AddedToLists}. */
124
+ set addedToLists(value: Set<string>);
125
+ RemovedFromLists: Set<string>;
126
+ /** @deprecated Use {@link RemovedFromLists}. */
127
+ get removedFromLists(): Set<string>;
128
+ /** @deprecated Use {@link RemovedFromLists}. */
129
+ set removedFromLists(value: Set<string>);
130
+ NewlyCreatedLists: MJListEntity[];
131
+ /** @deprecated Use {@link NewlyCreatedLists}. */
132
+ get newlyCreatedLists(): MJListEntity[];
133
+ /** @deprecated Use {@link NewlyCreatedLists}. */
134
+ set newlyCreatedLists(value: MJListEntity[]);
67
135
  private destroy$;
68
136
  private searchSubject;
69
137
  constructor(listService: ListManagementService, cdr: ChangeDetectorRef);
@@ -72,22 +140,32 @@ export declare class ListManagementDialogComponent extends BaseAngularComponent
72
140
  /**
73
141
  * Get dialog title based on config
74
142
  */
143
+ get DialogTitle(): string;
144
+ /** @deprecated Use {@link DialogTitle}. */
75
145
  get dialogTitle(): string;
76
146
  /**
77
147
  * Get subtitle showing context
78
148
  */
149
+ get DialogSubtitle(): string;
150
+ /** @deprecated Use {@link DialogSubtitle}. */
79
151
  get dialogSubtitle(): string;
80
152
  /**
81
153
  * Check if there are pending changes
82
154
  */
155
+ get HasChanges(): boolean;
156
+ /** @deprecated Use {@link HasChanges}. */
83
157
  get hasChanges(): boolean;
84
158
  /**
85
159
  * Get count of lists to add to
86
160
  */
161
+ get AddCount(): number;
162
+ /** @deprecated Use {@link AddCount}. */
87
163
  get addCount(): number;
88
164
  /**
89
165
  * Get count of lists to remove from
90
166
  */
167
+ get RemoveCount(): number;
168
+ /** @deprecated Use {@link RemoveCount}. */
91
169
  get removeCount(): number;
92
170
  /**
93
171
  * Setup search with debounce
@@ -108,18 +186,26 @@ export declare class ListManagementDialogComponent extends BaseAngularComponent
108
186
  /**
109
187
  * Handle search input
110
188
  */
189
+ OnSearchInput(event: Event): void;
190
+ /** @deprecated Use {@link OnSearchInput}. */
111
191
  onSearchInput(event: Event): void;
112
192
  /**
113
193
  * Clear search
114
194
  */
195
+ ClearSearch(): void;
196
+ /** @deprecated Use {@link ClearSearch}. */
115
197
  clearSearch(): void;
116
198
  /**
117
199
  * Change active tab
118
200
  */
201
+ SetActiveTab(tab: ListFilterTab): void;
202
+ /** @deprecated Use {@link SetActiveTab}. */
119
203
  setActiveTab(tab: ListFilterTab): void;
120
204
  /**
121
205
  * Change sort option
122
206
  */
207
+ SetSortOption(option: ListSortOption): void;
208
+ /** @deprecated Use {@link SetSortOption}. */
123
209
  setSortOption(option: ListSortOption): void;
124
210
  /**
125
211
  * Apply all filters and sorting
@@ -128,38 +214,56 @@ export declare class ListManagementDialogComponent extends BaseAngularComponent
128
214
  /**
129
215
  * Toggle list selection for adding
130
216
  */
217
+ ToggleListForAdd(vm: ListItemViewModel): void;
218
+ /** @deprecated Use {@link ToggleListForAdd}. */
131
219
  toggleListForAdd(vm: ListItemViewModel): void;
132
220
  /**
133
221
  * Toggle list selection for removal
134
222
  */
223
+ ToggleListForRemove(vm: ListItemViewModel): void;
224
+ /** @deprecated Use {@link ToggleListForRemove}. */
135
225
  toggleListForRemove(vm: ListItemViewModel): void;
136
226
  /**
137
227
  * Get membership indicator class
138
228
  */
229
+ GetMembershipClass(vm: ListItemViewModel): string;
230
+ /** @deprecated Use {@link GetMembershipClass}. */
139
231
  getMembershipClass(vm: ListItemViewModel): string;
140
232
  /**
141
233
  * Get membership indicator text
142
234
  */
235
+ GetMembershipText(vm: ListItemViewModel): string;
236
+ /** @deprecated Use {@link GetMembershipText}. */
143
237
  getMembershipText(vm: ListItemViewModel): string;
144
238
  /**
145
239
  * Get membership icon
146
240
  */
241
+ GetMembershipIcon(vm: ListItemViewModel): string;
242
+ /** @deprecated Use {@link GetMembershipIcon}. */
147
243
  getMembershipIcon(vm: ListItemViewModel): string;
148
244
  /**
149
245
  * Show create list form
150
246
  */
247
+ ShowCreateListForm(): void;
248
+ /** @deprecated Use {@link ShowCreateListForm}. */
151
249
  showCreateListForm(): void;
152
250
  /**
153
251
  * Cancel create list form
154
252
  */
253
+ CancelCreateList(): void;
254
+ /** @deprecated Use {@link CancelCreateList}. */
155
255
  cancelCreateList(): void;
156
256
  /**
157
257
  * Create a new list
158
258
  */
259
+ CreateList(): Promise<void>;
260
+ /** @deprecated Use {@link CreateList}. */
159
261
  createList(): Promise<void>;
160
262
  /**
161
263
  * Apply changes and close dialog
162
264
  */
265
+ ApplyChanges(): Promise<void>;
266
+ /** @deprecated Use {@link ApplyChanges}. */
163
267
  applyChanges(): Promise<void>;
164
268
  /**
165
269
  * Cancel and close dialog
@@ -172,12 +276,16 @@ export declare class ListManagementDialogComponent extends BaseAngularComponent
172
276
  /**
173
277
  * Check if we should show the add button for a list
174
278
  */
279
+ ShowAddButton(vm: ListItemViewModel): boolean;
280
+ /** @deprecated Use {@link ShowAddButton}. */
175
281
  showAddButton(vm: ListItemViewModel): boolean;
176
282
  /**
177
283
  * Check if we should show the remove button for a list
178
284
  */
285
+ ShowRemoveButton(vm: ListItemViewModel): boolean;
286
+ /** @deprecated Use {@link ShowRemoveButton}. */
179
287
  showRemoveButton(vm: ListItemViewModel): boolean;
180
288
  static ɵfac: i0.ɵɵFactoryDeclaration<ListManagementDialogComponent, never>;
181
- static ɵcmp: i0.ɵɵComponentDeclaration<ListManagementDialogComponent, "mj-list-management-dialog", never, { "config": { "alias": "config"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; }, { "complete": "complete"; "cancel": "cancel"; }, never, never, false, never>;
289
+ static ɵcmp: i0.ɵɵComponentDeclaration<ListManagementDialogComponent, "mj-list-management-dialog", never, { "config": { "alias": "config"; "required": false; }; "Visible": { "alias": "Visible"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; }, { "Complete": "Complete"; "complete": "complete"; "cancel": "cancel"; }, never, never, false, never>;
182
290
  }
183
291
  //# sourceMappingURL=list-management-dialog.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-management-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/list-management-dialog/list-management-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EACZ,MAAM,EACN,SAAS,EACT,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGrE,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAE/E,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,cAAc,EAGf,MAAM,qCAAqC,CAAC;;AAE7C;;;;;;;;;;GAUG;AACH,qBAMa,6BAA8B,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAsFhG,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,GAAG;IAtFb;;;;;;;;OAQG;IACH,IACI,MAAM,IAAI,0BAA0B,CAEvC;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,0BAA0B,EAG3C;IACD,OAAO,CAAC,OAAO,CAA8B;IAE7C;;OAEG;IACH,IACI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAMzB;IACD,OAAO,CAAC,QAAQ,CAAS;IAEzB,6FAA6F;IAC7F,OAAO,CAAC,YAAY,CAAS;IAE7B,2FAA2F;IAC3F,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACO,QAAQ,qCAA4C;IAE9D;;OAEG;IACO,MAAM,qBAA4B;IAG5C,OAAO,UAAS;IAChB,MAAM,UAAS;IACf,UAAU,SAAM;IAChB,SAAS,EAAE,aAAa,CAAS;IACjC,UAAU,EAAE,cAAc,CAAU;IACpC,cAAc,UAAS;IAGvB,QAAQ,EAAE,iBAAiB,EAAE,CAAM;IACnC,aAAa,EAAE,iBAAiB,EAAE,CAAM;IACxC,UAAU,EAAE,oBAAoB,EAAE,CAAM;IAGxC,WAAW,SAAM;IACjB,kBAAkB,SAAM;IACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGxC,OAAO,CAAC,kBAAkB,CAA8B;IACjD,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IACtC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAC1C,iBAAiB,EAAE,YAAY,EAAE,CAAM;IAG9C,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,aAAa,CAAyB;gBAGpC,WAAW,EAAE,qBAAqB,EAClC,GAAG,EAAE,iBAAiB;IAIhC,QAAQ,IAAI,IAAI;IAIhB,WAAW,IAAI,IAAI;IAKnB;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAgBxB;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,MAAM,CAS3B;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;OAEG;YACW,gBAAgB;IAS9B;;OAEG;IACH,OAAO,CAAC,UAAU;IAclB;;OAEG;YACW,QAAQ;IAyDtB;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAKjC;;OAEG;IACH,WAAW,IAAI,IAAI;IAKnB;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAKtC;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAK3C;;OAEG;IACH,OAAO,CAAC,YAAY;IA2CpB;;OAEG;IACH,gBAAgB,CAAC,EAAE,EAAE,iBAAiB,GAAG,IAAI;IAoB7C;;OAEG;IACH,mBAAmB,CAAC,EAAE,EAAE,iBAAiB,GAAG,IAAI;IAqBhD;;OAEG;IACH,kBAAkB,CAAC,EAAE,EAAE,iBAAiB,GAAG,MAAM;IAMjD;;OAEG;IACH,iBAAiB,CAAC,EAAE,EAAE,iBAAiB,GAAG,MAAM;IAUhD;;OAEG;IACH,iBAAiB,CAAC,EAAE,EAAE,iBAAiB,GAAG,MAAM;IAMhD;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAO1B;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAOxB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkDjC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAoEnC;;OAEG;IACH,QAAQ,IAAI,IAAI;IAYhB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAe9B;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,iBAAiB,GAAG,OAAO;IAK7C;;OAEG;IACH,gBAAgB,CAAC,EAAE,EAAE,iBAAiB,GAAG,OAAO;yCA1lBrC,6BAA6B;2CAA7B,6BAA6B;CA+lBzC"}
1
+ {"version":3,"file":"list-management-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/list-management-dialog/list-management-dialog.component.ts"],"names":[],"mappings":"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"}