@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.
- package/dist/lib/components/audience-source-picker/audience-source-picker.component.d.ts +74 -14
- package/dist/lib/components/audience-source-picker/audience-source-picker.component.d.ts.map +1 -1
- package/dist/lib/components/audience-source-picker/audience-source-picker.component.js +177 -57
- package/dist/lib/components/audience-source-picker/audience-source-picker.component.js.map +1 -1
- package/dist/lib/components/audience-source-summary/audience-source-summary.component.d.ts +7 -1
- package/dist/lib/components/audience-source-summary/audience-source-summary.component.d.ts.map +1 -1
- package/dist/lib/components/audience-source-summary/audience-source-summary.component.js +17 -5
- package/dist/lib/components/audience-source-summary/audience-source-summary.component.js.map +1 -1
- package/dist/lib/components/list-audit-log/list-audit-log.component.d.ts +30 -4
- package/dist/lib/components/list-audit-log/list-audit-log.component.d.ts.map +1 -1
- package/dist/lib/components/list-audit-log/list-audit-log.component.js +54 -14
- package/dist/lib/components/list-audit-log/list-audit-log.component.js.map +1 -1
- package/dist/lib/components/list-delta-confirm/list-delta-confirm.component.d.ts +17 -1
- package/dist/lib/components/list-delta-confirm/list-delta-confirm.component.d.ts.map +1 -1
- package/dist/lib/components/list-delta-confirm/list-delta-confirm.component.js +45 -13
- package/dist/lib/components/list-delta-confirm/list-delta-confirm.component.js.map +1 -1
- package/dist/lib/components/list-invitations/list-invitations.component.d.ts +48 -8
- package/dist/lib/components/list-invitations/list-invitations.component.d.ts.map +1 -1
- package/dist/lib/components/list-invitations/list-invitations.component.js +108 -28
- package/dist/lib/components/list-invitations/list-invitations.component.js.map +1 -1
- package/dist/lib/components/list-management-dialog/list-management-dialog.component.d.ts +123 -15
- package/dist/lib/components/list-management-dialog/list-management-dialog.component.d.ts.map +1 -1
- package/dist/lib/components/list-management-dialog/list-management-dialog.component.js +312 -100
- package/dist/lib/components/list-management-dialog/list-management-dialog.component.js.map +1 -1
- package/dist/lib/components/list-share-dialog/list-share-dialog.component.d.ts +128 -14
- package/dist/lib/components/list-share-dialog/list-share-dialog.component.d.ts.map +1 -1
- package/dist/lib/components/list-share-dialog/list-share-dialog.component.js +288 -92
- package/dist/lib/components/list-share-dialog/list-share-dialog.component.js.map +1 -1
- package/dist/lib/components/list-stats/list-stats.component.d.ts +32 -6
- package/dist/lib/components/list-stats/list-stats.component.d.ts.map +1 -1
- package/dist/lib/components/list-stats/list-stats.component.js +67 -15
- package/dist/lib/components/list-stats/list-stats.component.js.map +1 -1
- package/dist/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.d.ts +44 -8
- package/dist/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.d.ts.map +1 -1
- package/dist/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.js +100 -28
- package/dist/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.js.map +1 -1
- package/dist/lib/components/shared-with-me/shared-with-me.component.d.ts +18 -2
- package/dist/lib/components/shared-with-me/shared-with-me.component.d.ts.map +1 -1
- package/dist/lib/components/shared-with-me/shared-with-me.component.js +41 -9
- package/dist/lib/components/shared-with-me/shared-with-me.component.js.map +1 -1
- package/dist/lib/components/tag-chips/tag-chips.component.d.ts +30 -6
- package/dist/lib/components/tag-chips/tag-chips.component.d.ts.map +1 -1
- package/dist/lib/components/tag-chips/tag-chips.component.js +76 -28
- package/dist/lib/components/tag-chips/tag-chips.component.js.map +1 -1
- package/dist/lib/services/list-management.service.d.ts +25 -1
- package/dist/lib/services/list-management.service.d.ts.map +1 -1
- package/dist/lib/services/list-management.service.js +59 -11
- package/dist/lib/services/list-management.service.js.map +1 -1
- package/dist/lib/services/list-sharing.service.d.ts +42 -1
- package/dist/lib/services/list-sharing.service.d.ts.map +1 -1
- package/dist/lib/services/list-sharing.service.js +85 -17
- package/dist/lib/services/list-sharing.service.js.map +1 -1
- package/package.json +11 -11
|
@@ -209,30 +209,94 @@ export class SaveViewAsListDialogComponent extends BaseAngularComponent {
|
|
|
209
209
|
RecordCount = null;
|
|
210
210
|
Save = new EventEmitter();
|
|
211
211
|
Cancel = new EventEmitter();
|
|
212
|
-
|
|
212
|
+
ListName = '';
|
|
213
|
+
/** @deprecated Use {@link ListName}. */
|
|
214
|
+
get listName() {
|
|
215
|
+
return this.ListName;
|
|
216
|
+
}
|
|
217
|
+
/** @deprecated Use {@link ListName}. */
|
|
218
|
+
set listName(value) {
|
|
219
|
+
this.ListName = value;
|
|
220
|
+
}
|
|
213
221
|
description = '';
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
222
|
+
CategoryId = null;
|
|
223
|
+
/** @deprecated Use {@link CategoryId}. */
|
|
224
|
+
get categoryId() {
|
|
225
|
+
return this.CategoryId;
|
|
226
|
+
}
|
|
227
|
+
/** @deprecated Use {@link CategoryId}. */
|
|
228
|
+
set categoryId(value) {
|
|
229
|
+
this.CategoryId = value;
|
|
230
|
+
}
|
|
231
|
+
RememberLineage = true;
|
|
232
|
+
/** @deprecated Use {@link RememberLineage}. */
|
|
233
|
+
get rememberLineage() {
|
|
234
|
+
return this.RememberLineage;
|
|
235
|
+
}
|
|
236
|
+
/** @deprecated Use {@link RememberLineage}. */
|
|
237
|
+
set rememberLineage(value) {
|
|
238
|
+
this.RememberLineage = value;
|
|
239
|
+
}
|
|
240
|
+
UseSnapshot = true;
|
|
241
|
+
/** @deprecated Use {@link UseSnapshot}. */
|
|
242
|
+
get useSnapshot() {
|
|
243
|
+
return this.UseSnapshot;
|
|
244
|
+
}
|
|
245
|
+
/** @deprecated Use {@link UseSnapshot}. */
|
|
246
|
+
set useSnapshot(value) {
|
|
247
|
+
this.UseSnapshot = value;
|
|
248
|
+
}
|
|
249
|
+
RefreshMode = 'Additive';
|
|
250
|
+
/** @deprecated Use {@link RefreshMode}. */
|
|
251
|
+
get refreshMode() {
|
|
252
|
+
return this.RefreshMode;
|
|
253
|
+
}
|
|
254
|
+
/** @deprecated Use {@link RefreshMode}. */
|
|
255
|
+
set refreshMode(value) {
|
|
256
|
+
this.RefreshMode = value;
|
|
257
|
+
}
|
|
258
|
+
Categories = [];
|
|
259
|
+
/** @deprecated Use {@link Categories}. */
|
|
260
|
+
get categories() {
|
|
261
|
+
return this.Categories;
|
|
262
|
+
}
|
|
263
|
+
/** @deprecated Use {@link Categories}. */
|
|
264
|
+
set categories(value) {
|
|
265
|
+
this.Categories = value;
|
|
266
|
+
}
|
|
267
|
+
LoadingCategories = false;
|
|
268
|
+
/** @deprecated Use {@link LoadingCategories}. */
|
|
269
|
+
get loadingCategories() {
|
|
270
|
+
return this.LoadingCategories;
|
|
271
|
+
}
|
|
272
|
+
/** @deprecated Use {@link LoadingCategories}. */
|
|
273
|
+
set loadingCategories(value) {
|
|
274
|
+
this.LoadingCategories = value;
|
|
275
|
+
}
|
|
276
|
+
Submitting = false;
|
|
277
|
+
/** @deprecated Use {@link Submitting}. */
|
|
278
|
+
get submitting() {
|
|
279
|
+
return this.Submitting;
|
|
280
|
+
}
|
|
281
|
+
/** @deprecated Use {@link Submitting}. */
|
|
282
|
+
set submitting(value) {
|
|
283
|
+
this.Submitting = value;
|
|
284
|
+
}
|
|
221
285
|
async ngOnInit() {
|
|
222
286
|
await this.loadCategories();
|
|
223
287
|
}
|
|
224
288
|
OnSave() {
|
|
225
|
-
if (!this.
|
|
289
|
+
if (!this.CanSave)
|
|
226
290
|
return;
|
|
227
|
-
this.
|
|
291
|
+
this.Submitting = true;
|
|
228
292
|
const payload = {
|
|
229
|
-
ListName: this.
|
|
293
|
+
ListName: this.ListName.trim(),
|
|
230
294
|
Description: this.description.trim() || undefined,
|
|
231
|
-
CategoryId: this.
|
|
232
|
-
RememberLineage: this.
|
|
295
|
+
CategoryId: this.CategoryId ?? undefined,
|
|
296
|
+
RememberLineage: this.RememberLineage,
|
|
233
297
|
// UseSnapshot only meaningful when lineage is remembered.
|
|
234
|
-
UseSnapshot: this.
|
|
235
|
-
RefreshMode: this.
|
|
298
|
+
UseSnapshot: this.RememberLineage && this.UseSnapshot,
|
|
299
|
+
RefreshMode: this.RefreshMode,
|
|
236
300
|
};
|
|
237
301
|
this.Save.emit(payload);
|
|
238
302
|
}
|
|
@@ -240,28 +304,36 @@ export class SaveViewAsListDialogComponent extends BaseAngularComponent {
|
|
|
240
304
|
this.Cancel.emit();
|
|
241
305
|
}
|
|
242
306
|
OnLineageChange(remember) {
|
|
243
|
-
this.
|
|
307
|
+
this.RememberLineage = remember;
|
|
244
308
|
// If lineage is off, snapshot has no meaning — keep the checkbox state
|
|
245
309
|
// intact so re-enabling lineage restores it, but the emitted payload
|
|
246
310
|
// forces UseSnapshot=false (see `OnSave`).
|
|
247
311
|
}
|
|
312
|
+
get CanSave() {
|
|
313
|
+
return !!this.ViewId && this.ListName.trim().length > 0 && !this.Submitting;
|
|
314
|
+
}
|
|
315
|
+
/** @deprecated Use {@link CanSave}. */
|
|
248
316
|
get canSave() {
|
|
249
|
-
return
|
|
317
|
+
return this.CanSave;
|
|
250
318
|
}
|
|
251
|
-
get
|
|
252
|
-
if (this.
|
|
319
|
+
get ConfirmButtonLabel() {
|
|
320
|
+
if (this.Submitting)
|
|
253
321
|
return 'Saving...';
|
|
254
322
|
if (this.RecordCount != null)
|
|
255
323
|
return `Save List (${this.RecordCount} records)`;
|
|
256
324
|
return 'Save List';
|
|
257
325
|
}
|
|
326
|
+
/** @deprecated Use {@link ConfirmButtonLabel}. */
|
|
327
|
+
get confirmButtonLabel() {
|
|
328
|
+
return this.ConfirmButtonLabel;
|
|
329
|
+
}
|
|
258
330
|
/**
|
|
259
331
|
* Load list categories for the category dropdown. Multi-provider safe.
|
|
260
332
|
* Failures degrade gracefully — the dropdown just shows "Uncategorized"
|
|
261
333
|
* and we log so the user can troubleshoot.
|
|
262
334
|
*/
|
|
263
335
|
async loadCategories() {
|
|
264
|
-
this.
|
|
336
|
+
this.LoadingCategories = true;
|
|
265
337
|
try {
|
|
266
338
|
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
267
339
|
const result = await rv.RunView({
|
|
@@ -270,22 +342,22 @@ export class SaveViewAsListDialogComponent extends BaseAngularComponent {
|
|
|
270
342
|
ResultType: 'entity_object',
|
|
271
343
|
});
|
|
272
344
|
if (result.Success) {
|
|
273
|
-
this.
|
|
345
|
+
this.Categories = result.Results ?? [];
|
|
274
346
|
}
|
|
275
347
|
}
|
|
276
348
|
finally {
|
|
277
|
-
this.
|
|
349
|
+
this.LoadingCategories = false;
|
|
278
350
|
this.cdr.markForCheck();
|
|
279
351
|
}
|
|
280
352
|
}
|
|
281
353
|
resetForm() {
|
|
282
|
-
this.
|
|
354
|
+
this.ListName = this.ViewName ? `${this.ViewName} — Snapshot ${new Date().toISOString().slice(0, 10)}` : '';
|
|
283
355
|
this.description = '';
|
|
284
|
-
this.
|
|
285
|
-
this.
|
|
286
|
-
this.
|
|
287
|
-
this.
|
|
288
|
-
this.
|
|
356
|
+
this.CategoryId = null;
|
|
357
|
+
this.RememberLineage = true;
|
|
358
|
+
this.UseSnapshot = true;
|
|
359
|
+
this.RefreshMode = 'Additive';
|
|
360
|
+
this.Submitting = false;
|
|
289
361
|
}
|
|
290
362
|
static ɵfac = /*@__PURE__*/ (() => { let ɵSaveViewAsListDialogComponent_BaseFactory; return function SaveViewAsListDialogComponent_Factory(__ngFactoryType__) { return (ɵSaveViewAsListDialogComponent_BaseFactory || (ɵSaveViewAsListDialogComponent_BaseFactory = i0.ɵɵgetInheritedFactory(SaveViewAsListDialogComponent)))(__ngFactoryType__ || SaveViewAsListDialogComponent); }; })();
|
|
291
363
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SaveViewAsListDialogComponent, selectors: [["mj-save-view-as-list-dialog"]], inputs: { Visible: "Visible", ViewId: "ViewId", ViewName: "ViewName", RecordCount: "RecordCount" }, outputs: { Save: "Save", Cancel: "Cancel" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["Title", "Save View Results as List", 3, "Visible", "Width"], ["Title", "Save View Results as List", 3, "Close", "Visible", "Width"], [1, "save-view-form", 3, "submit"], ["Variant", "info"], [1, "field"], ["for", "save-view-list-name", 1, "field__label"], ["id", "save-view-list-name", "name", "listName", "required", "", "autofocus", "", 1, "mj-input", 3, "ngModelChange", "ngModel"], ["for", "save-view-description", 1, "field__label"], ["id", "save-view-description", "name", "description", "rows", "2", 1, "mj-input", 3, "ngModelChange", "ngModel"], ["for", "save-view-category", 1, "field__label"], ["id", "save-view-category", "name", "categoryId", 1, "mj-input", "mj-select", 3, "ngModelChange", "ngModel", "disabled"], [3, "ngValue"], [1, "divider"], [1, "lineage-section"], [1, "field__label"], [1, "lineage-option"], ["type", "radio", "name", "lineage", 3, "change", "checked"], [1, "lineage-option__title"], [1, "lineage-option__desc"], ["mjButton", "", "variant", "primary", "type", "button", 3, "click", "disabled"], [1, "fa-solid", "fa-check"], ["mjButton", "", "variant", "outline", "type", "button", 3, "click"], [1, "field--inline"], ["id", "save-view-freeze", "type", "checkbox", "name", "useSnapshot", 3, "ngModelChange", "ngModel"], ["for", "save-view-freeze"], [1, "muted"], ["for", "save-view-mode", 1, "field__label"], ["id", "save-view-mode", "name", "refreshMode", 1, "mj-input", "mj-select", 3, "ngModelChange", "ngModel"], ["value", "Additive"], ["value", "Sync"]], template: function SaveViewAsListDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
package/dist/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save-view-as-list-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.ts","../../../../src/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.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 } from '@memberjunction/core';\nimport { MJListCategoryEntity } from '@memberjunction/core-entities';\n\n/**\n * Form payload emitted when the user clicks Save. The parent component is\n * responsible for calling `GraphQLListsClient.MaterializeFromView` with these\n * options — we keep the dialog generic so it doesn't have to know about the\n * GraphQL transport.\n */\nexport interface SaveViewAsListResult {\n ListName: string;\n Description?: string;\n CategoryId?: string;\n RememberLineage: boolean;\n UseSnapshot: boolean;\n RefreshMode: 'Additive' | 'Sync';\n}\n\n/**\n * Dialog for materializing a User View into a new static List. Matches\n * mockup `09-save-view-as-list.html`: name + description + category, then\n * a radio group for source-lineage (remember vs one-time snapshot), then a\n * \"freeze filter\" checkbox that maps to `UseSnapshot` on the list.\n *\n * The dialog is reusable — pass `ViewId` + `ViewName` + the displayed\n * record count and listen for `Save` / `Cancel`. Multi-provider safe via\n * `BaseAngularComponent.ProviderToUse`.\n */\n@Component({\n standalone: false,\n selector: 'mj-save-view-as-list-dialog',\n templateUrl: './save-view-as-list-dialog.component.html',\n styleUrls: ['./save-view-as-list-dialog.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SaveViewAsListDialogComponent extends BaseAngularComponent implements OnInit {\n private readonly cdr = inject(ChangeDetectorRef);\n\n /** Visibility toggle, getter/setter so opening resets the form. */\n @Input()\n get Visible(): boolean {\n return this._visible;\n }\n set Visible(value: boolean) {\n if (value && !this._visible) this.resetForm();\n this._visible = value;\n }\n private _visible = false;\n\n /** Required — the User View we're materializing from. */\n @Input() ViewId: string | null = null;\n\n /** Display name of the source view (shown in the info banner + default list name). */\n @Input() ViewName: string | null = null;\n\n /** Optional — record count shown in the button label + info banner. */\n @Input() RecordCount: number | null = null;\n\n @Output() Save = new EventEmitter<SaveViewAsListResult>();\n @Output() Cancel = new EventEmitter<void>();\n\n public listName = '';\n public description = '';\n public categoryId: string | null = null;\n public rememberLineage = true;\n public useSnapshot = true;\n public refreshMode: 'Additive' | 'Sync' = 'Additive';\n\n public categories: MJListCategoryEntity[] = [];\n public loadingCategories = false;\n public submitting = false;\n\n async ngOnInit(): Promise<void> {\n await this.loadCategories();\n }\n\n public OnSave(): void {\n if (!this.canSave) return;\n this.submitting = true;\n const payload: SaveViewAsListResult = {\n ListName: this.listName.trim(),\n Description: this.description.trim() || undefined,\n CategoryId: this.categoryId ?? undefined,\n RememberLineage: this.rememberLineage,\n // UseSnapshot only meaningful when lineage is remembered.\n UseSnapshot: this.rememberLineage && this.useSnapshot,\n RefreshMode: this.refreshMode,\n };\n this.Save.emit(payload);\n }\n\n public OnCancel(): void {\n this.Cancel.emit();\n }\n\n public OnLineageChange(remember: boolean): void {\n this.rememberLineage = remember;\n // If lineage is off, snapshot has no meaning — keep the checkbox state\n // intact so re-enabling lineage restores it, but the emitted payload\n // forces UseSnapshot=false (see `OnSave`).\n }\n\n public get canSave(): boolean {\n return !!this.ViewId && this.listName.trim().length > 0 && !this.submitting;\n }\n\n public get confirmButtonLabel(): string {\n if (this.submitting) return 'Saving...';\n if (this.RecordCount != null) return `Save List (${this.RecordCount} records)`;\n return 'Save List';\n }\n\n /**\n * Load list categories for the category dropdown. Multi-provider safe.\n * Failures degrade gracefully — the dropdown just shows \"Uncategorized\"\n * and we log so the user can troubleshoot.\n */\n private async loadCategories(): Promise<void> {\n this.loadingCategories = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJListCategoryEntity>({\n EntityName: 'MJ: List Categories',\n OrderBy: 'Name ASC',\n ResultType: 'entity_object',\n });\n if (result.Success) {\n this.categories = result.Results ?? [];\n }\n } finally {\n this.loadingCategories = false;\n this.cdr.markForCheck();\n }\n }\n\n private resetForm(): void {\n this.listName = this.ViewName ? `${this.ViewName} — Snapshot ${new Date().toISOString().slice(0, 10)}` : '';\n this.description = '';\n this.categoryId = null;\n this.rememberLineage = true;\n this.useSnapshot = true;\n this.refreshMode = 'Additive';\n this.submitting = false;\n }\n}\n","@if (Visible) {\n <mj-dialog\n [Visible]=\"true\"\n [Width]=\"560\"\n Title=\"Save View Results as List\"\n (Close)=\"OnCancel()\">\n <form class=\"save-view-form\" (submit)=\"$event.preventDefault(); OnSave()\">\n <mj-alert Variant=\"info\">\n <div>\n Materializes\n @if (RecordCount != null) {\n <strong>{{ RecordCount }} records</strong>\n } @else {\n <strong>view results</strong>\n }\n @if (ViewName) {\n from <strong>{{ ViewName }}</strong>\n }\n into a static List. The list can be refreshed from this view later if you keep lineage on.\n </div>\n </mj-alert>\n\n <div class=\"field\">\n <label class=\"field__label\" for=\"save-view-list-name\">List name</label>\n <input\n id=\"save-view-list-name\"\n class=\"mj-input\"\n [(ngModel)]=\"listName\"\n name=\"listName\"\n required\n autofocus />\n </div>\n\n <div class=\"field\">\n <label class=\"field__label\" for=\"save-view-description\">Description</label>\n <textarea\n id=\"save-view-description\"\n class=\"mj-input\"\n [(ngModel)]=\"description\"\n name=\"description\"\n rows=\"2\"></textarea>\n </div>\n\n <div class=\"field\">\n <label class=\"field__label\" for=\"save-view-category\">Category</label>\n <select\n id=\"save-view-category\"\n class=\"mj-input mj-select\"\n [(ngModel)]=\"categoryId\"\n name=\"categoryId\"\n [disabled]=\"loadingCategories\">\n <option [ngValue]=\"null\">(uncategorized)</option>\n @for (cat of categories; track cat.ID) {\n <option [ngValue]=\"cat.ID\">{{ cat.Name }}</option>\n }\n </select>\n </div>\n\n <div class=\"divider\"></div>\n\n <div class=\"lineage-section\">\n <div class=\"field__label\">Source lineage</div>\n <label class=\"lineage-option\" [class.lineage-option--selected]=\"rememberLineage\">\n <input\n type=\"radio\"\n name=\"lineage\"\n [checked]=\"rememberLineage\"\n (change)=\"OnLineageChange(true)\" />\n <div>\n <div class=\"lineage-option__title\">Remember source view (recommended)</div>\n <div class=\"lineage-option__desc\">\n Stores <code>SourceViewID</code> and (optionally) the current filter. Enables\n <strong>Refresh from source</strong> later. You'll choose Additive or Sync each refresh.\n </div>\n </div>\n </label>\n <label class=\"lineage-option\" [class.lineage-option--selected]=\"!rememberLineage\">\n <input\n type=\"radio\"\n name=\"lineage\"\n [checked]=\"!rememberLineage\"\n (change)=\"OnLineageChange(false)\" />\n <div>\n <div class=\"lineage-option__title\">One-time snapshot</div>\n <div class=\"lineage-option__desc\">\n No lineage stored. List is fully static; later changes to the view do not propagate.\n </div>\n </div>\n </label>\n </div>\n\n @if (rememberLineage) {\n <div class=\"field--inline\">\n <input\n id=\"save-view-freeze\"\n type=\"checkbox\"\n [(ngModel)]=\"useSnapshot\"\n name=\"useSnapshot\" />\n <label for=\"save-view-freeze\">\n Freeze filter at current value\n <span class=\"muted\">\n (<code>UseSnapshot = true</code>) — refresh re-runs the saved filter, even if the view is later edited\n </span>\n </label>\n </div>\n\n <div class=\"field\">\n <label class=\"field__label\" for=\"save-view-mode\">Default refresh mode</label>\n <select\n id=\"save-view-mode\"\n class=\"mj-input mj-select\"\n [(ngModel)]=\"refreshMode\"\n name=\"refreshMode\">\n <option value=\"Additive\">Additive — only adds new records on refresh</option>\n <option value=\"Sync\">Sync — reconciles in both directions (may remove records)</option>\n </select>\n </div>\n }\n </form>\n\n <mj-dialog-actions>\n <button mjButton variant=\"primary\" type=\"button\" [disabled]=\"!canSave\" (click)=\"OnSave()\">\n <i class=\"fa-solid fa-check\"></i>\n {{ confirmButtonLabel }}\n </button>\n <button mjButton variant=\"outline\" type=\"button\" (click)=\"OnCancel()\">Cancel</button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n"]}
|
|
1
|
+
{"version":3,"file":"save-view-as-list-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.ts","../../../../src/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.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 } from '@memberjunction/core';\nimport { MJListCategoryEntity } from '@memberjunction/core-entities';\n\n/**\n * Form payload emitted when the user clicks Save. The parent component is\n * responsible for calling `GraphQLListsClient.MaterializeFromView` with these\n * options — we keep the dialog generic so it doesn't have to know about the\n * GraphQL transport.\n */\nexport interface SaveViewAsListResult {\n ListName: string;\n Description?: string;\n CategoryId?: string;\n RememberLineage: boolean;\n UseSnapshot: boolean;\n RefreshMode: 'Additive' | 'Sync';\n}\n\n/**\n * Dialog for materializing a User View into a new static List. Matches\n * mockup `09-save-view-as-list.html`: name + description + category, then\n * a radio group for source-lineage (remember vs one-time snapshot), then a\n * \"freeze filter\" checkbox that maps to `UseSnapshot` on the list.\n *\n * The dialog is reusable — pass `ViewId` + `ViewName` + the displayed\n * record count and listen for `Save` / `Cancel`. Multi-provider safe via\n * `BaseAngularComponent.ProviderToUse`.\n */\n@Component({\n standalone: false,\n selector: 'mj-save-view-as-list-dialog',\n templateUrl: './save-view-as-list-dialog.component.html',\n styleUrls: ['./save-view-as-list-dialog.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SaveViewAsListDialogComponent extends BaseAngularComponent implements OnInit {\n private readonly cdr = inject(ChangeDetectorRef);\n\n /** Visibility toggle, getter/setter so opening resets the form. */\n @Input()\n get Visible(): boolean {\n return this._visible;\n }\n set Visible(value: boolean) {\n if (value && !this._visible) this.resetForm();\n this._visible = value;\n }\n private _visible = false;\n\n /** Required — the User View we're materializing from. */\n @Input() ViewId: string | null = null;\n\n /** Display name of the source view (shown in the info banner + default list name). */\n @Input() ViewName: string | null = null;\n\n /** Optional — record count shown in the button label + info banner. */\n @Input() RecordCount: number | null = null;\n\n @Output() Save = new EventEmitter<SaveViewAsListResult>();\n @Output() Cancel = new EventEmitter<void>();\n\n public ListName = '';\n\n /** @deprecated Use {@link ListName}. */\n public get listName() {\n return this.ListName;\n }\n /** @deprecated Use {@link ListName}. */\n public set listName(value) {\n this.ListName = value;\n }\n public description = '';\n public CategoryId: string | null = null;\n\n /** @deprecated Use {@link CategoryId}. */\n public get categoryId(): string | null {\n return this.CategoryId;\n }\n /** @deprecated Use {@link CategoryId}. */\n public set categoryId(value: string | null) {\n this.CategoryId = value;\n }\n public RememberLineage = true;\n\n /** @deprecated Use {@link RememberLineage}. */\n public get rememberLineage() {\n return this.RememberLineage;\n }\n /** @deprecated Use {@link RememberLineage}. */\n public set rememberLineage(value) {\n this.RememberLineage = value;\n }\n public UseSnapshot = true;\n\n /** @deprecated Use {@link UseSnapshot}. */\n public get useSnapshot() {\n return this.UseSnapshot;\n }\n /** @deprecated Use {@link UseSnapshot}. */\n public set useSnapshot(value) {\n this.UseSnapshot = value;\n }\n public RefreshMode: 'Additive' | 'Sync' = 'Additive';\n\n /** @deprecated Use {@link RefreshMode}. */\n public get refreshMode(): 'Additive' | 'Sync' {\n return this.RefreshMode;\n }\n /** @deprecated Use {@link RefreshMode}. */\n public set refreshMode(value: 'Additive' | 'Sync') {\n this.RefreshMode = value;\n }\n\n public Categories: MJListCategoryEntity[] = [];\n\n /** @deprecated Use {@link Categories}. */\n public get categories(): MJListCategoryEntity[] {\n return this.Categories;\n }\n /** @deprecated Use {@link Categories}. */\n public set categories(value: MJListCategoryEntity[]) {\n this.Categories = value;\n }\n public LoadingCategories = false;\n\n /** @deprecated Use {@link LoadingCategories}. */\n public get loadingCategories() {\n return this.LoadingCategories;\n }\n /** @deprecated Use {@link LoadingCategories}. */\n public set loadingCategories(value) {\n this.LoadingCategories = value;\n }\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 async ngOnInit(): Promise<void> {\n await this.loadCategories();\n }\n\n public OnSave(): void {\n if (!this.CanSave) return;\n this.Submitting = true;\n const payload: SaveViewAsListResult = {\n ListName: this.ListName.trim(),\n Description: this.description.trim() || undefined,\n CategoryId: this.CategoryId ?? undefined,\n RememberLineage: this.RememberLineage,\n // UseSnapshot only meaningful when lineage is remembered.\n UseSnapshot: this.RememberLineage && this.UseSnapshot,\n RefreshMode: this.RefreshMode,\n };\n this.Save.emit(payload);\n }\n\n public OnCancel(): void {\n this.Cancel.emit();\n }\n\n public OnLineageChange(remember: boolean): void {\n this.RememberLineage = remember;\n // If lineage is off, snapshot has no meaning — keep the checkbox state\n // intact so re-enabling lineage restores it, but the emitted payload\n // forces UseSnapshot=false (see `OnSave`).\n }\n\n public get CanSave(): boolean {\n return !!this.ViewId && this.ListName.trim().length > 0 && !this.Submitting;\n }\n\n /** @deprecated Use {@link CanSave}. */\n public get canSave(): boolean {\n return this.CanSave;\n }\n\n public get ConfirmButtonLabel(): string {\n if (this.Submitting) return 'Saving...';\n if (this.RecordCount != null) return `Save List (${this.RecordCount} records)`;\n return 'Save List';\n }\n\n /** @deprecated Use {@link ConfirmButtonLabel}. */\n public get confirmButtonLabel(): string {\n return this.ConfirmButtonLabel;\n }\n\n /**\n * Load list categories for the category dropdown. Multi-provider safe.\n * Failures degrade gracefully — the dropdown just shows \"Uncategorized\"\n * and we log so the user can troubleshoot.\n */\n private async loadCategories(): Promise<void> {\n this.LoadingCategories = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJListCategoryEntity>({\n EntityName: 'MJ: List Categories',\n OrderBy: 'Name ASC',\n ResultType: 'entity_object',\n });\n if (result.Success) {\n this.Categories = result.Results ?? [];\n }\n } finally {\n this.LoadingCategories = false;\n this.cdr.markForCheck();\n }\n }\n\n private resetForm(): void {\n this.ListName = this.ViewName ? `${this.ViewName} — Snapshot ${new Date().toISOString().slice(0, 10)}` : '';\n this.description = '';\n this.CategoryId = null;\n this.RememberLineage = true;\n this.UseSnapshot = true;\n this.RefreshMode = 'Additive';\n this.Submitting = false;\n }\n}\n","@if (Visible) {\n <mj-dialog\n [Visible]=\"true\"\n [Width]=\"560\"\n Title=\"Save View Results as List\"\n (Close)=\"OnCancel()\">\n <form class=\"save-view-form\" (submit)=\"$event.preventDefault(); OnSave()\">\n <mj-alert Variant=\"info\">\n <div>\n Materializes\n @if (RecordCount != null) {\n <strong>{{ RecordCount }} records</strong>\n } @else {\n <strong>view results</strong>\n }\n @if (ViewName) {\n from <strong>{{ ViewName }}</strong>\n }\n into a static List. The list can be refreshed from this view later if you keep lineage on.\n </div>\n </mj-alert>\n\n <div class=\"field\">\n <label class=\"field__label\" for=\"save-view-list-name\">List name</label>\n <input\n id=\"save-view-list-name\"\n class=\"mj-input\"\n [(ngModel)]=\"listName\"\n name=\"listName\"\n required\n autofocus />\n </div>\n\n <div class=\"field\">\n <label class=\"field__label\" for=\"save-view-description\">Description</label>\n <textarea\n id=\"save-view-description\"\n class=\"mj-input\"\n [(ngModel)]=\"description\"\n name=\"description\"\n rows=\"2\"></textarea>\n </div>\n\n <div class=\"field\">\n <label class=\"field__label\" for=\"save-view-category\">Category</label>\n <select\n id=\"save-view-category\"\n class=\"mj-input mj-select\"\n [(ngModel)]=\"categoryId\"\n name=\"categoryId\"\n [disabled]=\"loadingCategories\">\n <option [ngValue]=\"null\">(uncategorized)</option>\n @for (cat of categories; track cat.ID) {\n <option [ngValue]=\"cat.ID\">{{ cat.Name }}</option>\n }\n </select>\n </div>\n\n <div class=\"divider\"></div>\n\n <div class=\"lineage-section\">\n <div class=\"field__label\">Source lineage</div>\n <label class=\"lineage-option\" [class.lineage-option--selected]=\"rememberLineage\">\n <input\n type=\"radio\"\n name=\"lineage\"\n [checked]=\"rememberLineage\"\n (change)=\"OnLineageChange(true)\" />\n <div>\n <div class=\"lineage-option__title\">Remember source view (recommended)</div>\n <div class=\"lineage-option__desc\">\n Stores <code>SourceViewID</code> and (optionally) the current filter. Enables\n <strong>Refresh from source</strong> later. You'll choose Additive or Sync each refresh.\n </div>\n </div>\n </label>\n <label class=\"lineage-option\" [class.lineage-option--selected]=\"!rememberLineage\">\n <input\n type=\"radio\"\n name=\"lineage\"\n [checked]=\"!rememberLineage\"\n (change)=\"OnLineageChange(false)\" />\n <div>\n <div class=\"lineage-option__title\">One-time snapshot</div>\n <div class=\"lineage-option__desc\">\n No lineage stored. List is fully static; later changes to the view do not propagate.\n </div>\n </div>\n </label>\n </div>\n\n @if (rememberLineage) {\n <div class=\"field--inline\">\n <input\n id=\"save-view-freeze\"\n type=\"checkbox\"\n [(ngModel)]=\"useSnapshot\"\n name=\"useSnapshot\" />\n <label for=\"save-view-freeze\">\n Freeze filter at current value\n <span class=\"muted\">\n (<code>UseSnapshot = true</code>) — refresh re-runs the saved filter, even if the view is later edited\n </span>\n </label>\n </div>\n\n <div class=\"field\">\n <label class=\"field__label\" for=\"save-view-mode\">Default refresh mode</label>\n <select\n id=\"save-view-mode\"\n class=\"mj-input mj-select\"\n [(ngModel)]=\"refreshMode\"\n name=\"refreshMode\">\n <option value=\"Additive\">Additive — only adds new records on refresh</option>\n <option value=\"Sync\">Sync — reconciles in both directions (may remove records)</option>\n </select>\n </div>\n }\n </form>\n\n <mj-dialog-actions>\n <button mjButton variant=\"primary\" type=\"button\" [disabled]=\"!canSave\" (click)=\"OnSave()\">\n <i class=\"fa-solid fa-check\"></i>\n {{ confirmButtonLabel }}\n </button>\n <button mjButton variant=\"outline\" type=\"button\" (click)=\"OnCancel()\">Cancel</button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n"]}
|
|
@@ -20,13 +20,23 @@ export declare class ListsSharedWithMeComponent extends BaseAngularComponent imp
|
|
|
20
20
|
ListName: string;
|
|
21
21
|
}>;
|
|
22
22
|
/** Permission-level filter (empty = "All Permissions"). */
|
|
23
|
-
|
|
23
|
+
FilterLevel: SharePermissionLevel | '';
|
|
24
|
+
/** @deprecated Use {@link FilterLevel}. */
|
|
25
|
+
get filterLevel(): SharePermissionLevel | '';
|
|
26
|
+
/** @deprecated Use {@link FilterLevel}. */
|
|
27
|
+
set filterLevel(value: SharePermissionLevel | '');
|
|
24
28
|
/** Free-text filter on list name. */
|
|
25
29
|
filterText: string;
|
|
26
|
-
|
|
30
|
+
Loading: boolean;
|
|
31
|
+
/** @deprecated Use {@link Loading}. */
|
|
32
|
+
get loading(): boolean;
|
|
33
|
+
/** @deprecated Use {@link Loading}. */
|
|
34
|
+
set loading(value: boolean);
|
|
27
35
|
errorMessage: string | null;
|
|
28
36
|
private allShares;
|
|
29
37
|
ngOnInit(): Promise<void>;
|
|
38
|
+
get VisibleShares(): SharedListSummary[];
|
|
39
|
+
/** @deprecated Use {@link VisibleShares}. */
|
|
30
40
|
get visibleShares(): SharedListSummary[];
|
|
31
41
|
OnFilterChange(): void;
|
|
32
42
|
OnCardClick(listId: string): void;
|
|
@@ -36,9 +46,15 @@ export declare class ListsSharedWithMeComponent extends BaseAngularComponent imp
|
|
|
36
46
|
* ("3d ago", "2w ago"). Matches the mockup; falls back to absolute on
|
|
37
47
|
* older entries.
|
|
38
48
|
*/
|
|
49
|
+
FormatRelative(date: Date): string;
|
|
50
|
+
/** @deprecated Use {@link FormatRelative}. */
|
|
39
51
|
formatRelative(date: Date): string;
|
|
40
52
|
/** Badge variant class for the permission-level chip. */
|
|
53
|
+
BadgeClass(level: SharePermissionLevel): string;
|
|
54
|
+
/** @deprecated Use {@link BadgeClass}. */
|
|
41
55
|
badgeClass(level: SharePermissionLevel): string;
|
|
56
|
+
BadgeLabel(level: SharePermissionLevel): string;
|
|
57
|
+
/** @deprecated Use {@link BadgeLabel}. */
|
|
42
58
|
badgeLabel(level: SharePermissionLevel): string;
|
|
43
59
|
private loadShares;
|
|
44
60
|
static ɵfac: i0.ɵɵFactoryDeclaration<ListsSharedWithMeComponent, never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-with-me.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/shared-with-me/shared-with-me.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyD,YAAY,EAAE,MAAM,EAAkB,MAAM,eAAe,CAAC;AAE5H,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;;AAE1F;;;;;;;GAOG;AACH,qBAOa,0BAA2B,SAAQ,oBAAqB,YAAW,MAAM;IACpF,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6B;IAEjD;;0BAEsB;IACZ,QAAQ;gBAA8B,MAAM;kBAAY,MAAM;OAAM;IAE9E,2DAA2D;IACpD,WAAW,EAAE,oBAAoB,GAAG,EAAE,CAAM;IAEnD,qCAAqC;IAC9B,UAAU,SAAM;IAEhB,OAAO,UAAS;
|
|
1
|
+
{"version":3,"file":"shared-with-me.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/shared-with-me/shared-with-me.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyD,YAAY,EAAE,MAAM,EAAkB,MAAM,eAAe,CAAC;AAE5H,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;;AAE1F;;;;;;;GAOG;AACH,qBAOa,0BAA2B,SAAQ,oBAAqB,YAAW,MAAM;IACpF,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6B;IAEjD;;0BAEsB;IACZ,QAAQ;gBAA8B,MAAM;kBAAY,MAAM;OAAM;IAE9E,2DAA2D;IACpD,WAAW,EAAE,oBAAoB,GAAG,EAAE,CAAM;IAEnD,2CAA2C;IAC3C,IAAW,WAAW,IAAI,oBAAoB,GAAG,EAAE,CAElD;IACD,2CAA2C;IAC3C,IAAW,WAAW,CAAC,KAAK,EAAE,oBAAoB,GAAG,EAAE,EAEtD;IAED,qCAAqC;IAC9B,UAAU,SAAM;IAEhB,OAAO,UAAS;IAEvB,uCAAuC;IACvC,IAAW,OAAO,YAEjB;IACD,uCAAuC;IACvC,IAAW,OAAO,CAAC,KAAK,SAAA,EAEvB;IACM,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC1C,OAAO,CAAC,SAAS,CAA2B;IAEtC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,IAAW,aAAa,IAAI,iBAAiB,EAAE,CAO9C;IAED,6CAA6C;IAC7C,IAAW,aAAa,IAAI,iBAAiB,EAAE,CAE9C;IAEM,cAAc,IAAI,IAAI;IAItB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrC;;;;OAIG;IACI,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAiBzC,8CAA8C;IACvC,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAIzC,yDAAyD;IAClD,UAAU,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM;IAWtD,0CAA0C;IACnC,UAAU,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM;IAI/C,UAAU,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM;IAWtD,0CAA0C;IACnC,UAAU,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM;YAIxC,UAAU;yCA/Hb,0BAA0B;2CAA1B,0BAA0B;CA+ItC"}
|
|
@@ -85,25 +85,45 @@ export class ListsSharedWithMeComponent extends BaseAngularComponent {
|
|
|
85
85
|
* a second fetch. */
|
|
86
86
|
OpenList = new EventEmitter();
|
|
87
87
|
/** Permission-level filter (empty = "All Permissions"). */
|
|
88
|
-
|
|
88
|
+
FilterLevel = '';
|
|
89
|
+
/** @deprecated Use {@link FilterLevel}. */
|
|
90
|
+
get filterLevel() {
|
|
91
|
+
return this.FilterLevel;
|
|
92
|
+
}
|
|
93
|
+
/** @deprecated Use {@link FilterLevel}. */
|
|
94
|
+
set filterLevel(value) {
|
|
95
|
+
this.FilterLevel = value;
|
|
96
|
+
}
|
|
89
97
|
/** Free-text filter on list name. */
|
|
90
98
|
filterText = '';
|
|
91
|
-
|
|
99
|
+
Loading = false;
|
|
100
|
+
/** @deprecated Use {@link Loading}. */
|
|
101
|
+
get loading() {
|
|
102
|
+
return this.Loading;
|
|
103
|
+
}
|
|
104
|
+
/** @deprecated Use {@link Loading}. */
|
|
105
|
+
set loading(value) {
|
|
106
|
+
this.Loading = value;
|
|
107
|
+
}
|
|
92
108
|
errorMessage = null;
|
|
93
109
|
allShares = [];
|
|
94
110
|
async ngOnInit() {
|
|
95
111
|
await this.loadShares();
|
|
96
112
|
}
|
|
97
|
-
get
|
|
113
|
+
get VisibleShares() {
|
|
98
114
|
const term = this.filterText.trim().toLowerCase();
|
|
99
115
|
return this.allShares.filter((s) => {
|
|
100
|
-
if (this.
|
|
116
|
+
if (this.FilterLevel && s.PermissionLevel !== this.FilterLevel)
|
|
101
117
|
return false;
|
|
102
118
|
if (term && !s.ListName.toLowerCase().includes(term))
|
|
103
119
|
return false;
|
|
104
120
|
return true;
|
|
105
121
|
});
|
|
106
122
|
}
|
|
123
|
+
/** @deprecated Use {@link VisibleShares}. */
|
|
124
|
+
get visibleShares() {
|
|
125
|
+
return this.VisibleShares;
|
|
126
|
+
}
|
|
107
127
|
OnFilterChange() {
|
|
108
128
|
this.cdr.markForCheck();
|
|
109
129
|
}
|
|
@@ -119,7 +139,7 @@ export class ListsSharedWithMeComponent extends BaseAngularComponent {
|
|
|
119
139
|
* ("3d ago", "2w ago"). Matches the mockup; falls back to absolute on
|
|
120
140
|
* older entries.
|
|
121
141
|
*/
|
|
122
|
-
|
|
142
|
+
FormatRelative(date) {
|
|
123
143
|
const diffMs = Date.now() - date.getTime();
|
|
124
144
|
const seconds = Math.floor(diffMs / 1000);
|
|
125
145
|
if (seconds < 60)
|
|
@@ -141,8 +161,12 @@ export class ListsSharedWithMeComponent extends BaseAngularComponent {
|
|
|
141
161
|
return `${months}mo ago`;
|
|
142
162
|
return date.toLocaleDateString();
|
|
143
163
|
}
|
|
164
|
+
/** @deprecated Use {@link FormatRelative}. */
|
|
165
|
+
formatRelative(date) {
|
|
166
|
+
return this.FormatRelative(date);
|
|
167
|
+
}
|
|
144
168
|
/** Badge variant class for the permission-level chip. */
|
|
145
|
-
|
|
169
|
+
BadgeClass(level) {
|
|
146
170
|
switch (level) {
|
|
147
171
|
case 'Owner':
|
|
148
172
|
return 'badge--owner';
|
|
@@ -152,7 +176,11 @@ export class ListsSharedWithMeComponent extends BaseAngularComponent {
|
|
|
152
176
|
return 'badge--viewer';
|
|
153
177
|
}
|
|
154
178
|
}
|
|
155
|
-
|
|
179
|
+
/** @deprecated Use {@link BadgeClass}. */
|
|
180
|
+
badgeClass(level) {
|
|
181
|
+
return this.BadgeClass(level);
|
|
182
|
+
}
|
|
183
|
+
BadgeLabel(level) {
|
|
156
184
|
switch (level) {
|
|
157
185
|
case 'Owner':
|
|
158
186
|
return 'Owner';
|
|
@@ -162,8 +190,12 @@ export class ListsSharedWithMeComponent extends BaseAngularComponent {
|
|
|
162
190
|
return 'Viewer';
|
|
163
191
|
}
|
|
164
192
|
}
|
|
193
|
+
/** @deprecated Use {@link BadgeLabel}. */
|
|
194
|
+
badgeLabel(level) {
|
|
195
|
+
return this.BadgeLabel(level);
|
|
196
|
+
}
|
|
165
197
|
async loadShares() {
|
|
166
|
-
this.
|
|
198
|
+
this.Loading = true;
|
|
167
199
|
this.errorMessage = null;
|
|
168
200
|
this.cdr.markForCheck();
|
|
169
201
|
try {
|
|
@@ -176,7 +208,7 @@ export class ListsSharedWithMeComponent extends BaseAngularComponent {
|
|
|
176
208
|
this.allShares = [];
|
|
177
209
|
}
|
|
178
210
|
finally {
|
|
179
|
-
this.
|
|
211
|
+
this.Loading = false;
|
|
180
212
|
this.cdr.markForCheck();
|
|
181
213
|
}
|
|
182
214
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-with-me.component.js","sourceRoot":"","sources":["../../../../src/lib/components/shared-with-me/shared-with-me.component.ts","../../../../src/lib/components/shared-with-me/shared-with-me.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, OnInit, Output, inject } from '@angular/core';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { GraphQLDataProvider, GraphQLListsClient } from '@memberjunction/graphql-dataprovider';\nimport type { SharedListSummary, SharePermissionLevel } from '@memberjunction/lists-base';\n\n/**\n * \"Shared With Me\" view (mockup 17). Lists every `MJ: List` the current\n * user has direct-share access to, plus a permission badge per row.\n *\n * Drop into the Lists app as a tab/resource. Click events bubble up via\n * `OpenList` so the host app can route through its own navigation\n * (NavigationService etc.) — keeps this component framework-agnostic.\n */\n@Component({\n standalone: false,\n selector: 'mj-lists-shared-with-me',\n templateUrl: './shared-with-me.component.html',\n styleUrls: ['./shared-with-me.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListsSharedWithMeComponent extends BaseAngularComponent implements OnInit {\n private readonly cdr = inject(ChangeDetectorRef);\n\n /** Emitted when the user clicks a card. Host wires this to navigation.\n * Includes ListName so the host can open a properly-titled tab without\n * a second fetch. */\n @Output() OpenList = new EventEmitter<{ ListID: string; ListName: string }>();\n\n /** Permission-level filter (empty = \"All Permissions\"). */\n public filterLevel: SharePermissionLevel | '' = '';\n\n /** Free-text filter on list name. */\n public filterText = '';\n\n public loading = false;\n public errorMessage: string | null = null;\n private allShares: SharedListSummary[] = [];\n\n async ngOnInit(): Promise<void> {\n await this.loadShares();\n }\n\n public get visibleShares(): SharedListSummary[] {\n const term = this.filterText.trim().toLowerCase();\n return this.allShares.filter((s) => {\n if (this.filterLevel && s.PermissionLevel !== this.filterLevel) return false;\n if (term && !s.ListName.toLowerCase().includes(term)) return false;\n return true;\n });\n }\n\n public OnFilterChange(): void {\n this.cdr.markForCheck();\n }\n\n public OnCardClick(listId: string): void {\n const share = this.allShares.find((s) => s.ListID === listId);\n this.OpenList.emit({ ListID: listId, ListName: share?.ListName ?? '' });\n }\n\n public async Refresh(): Promise<void> {\n await this.loadShares();\n }\n\n /**\n * Friendly-format the \"shared at\" timestamp into a relative phrase\n * (\"3d ago\", \"2w ago\"). Matches the mockup; falls back to absolute on\n * older entries.\n */\n public formatRelative(date: Date): string {\n const diffMs = Date.now() - date.getTime();\n const seconds = Math.floor(diffMs / 1000);\n if (seconds < 60) return 'just now';\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m ago`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h ago`;\n const days = Math.floor(hours / 24);\n if (days < 7) return `${days}d ago`;\n const weeks = Math.floor(days / 7);\n if (weeks < 5) return `${weeks}w ago`;\n const months = Math.floor(days / 30);\n if (months < 12) return `${months}mo ago`;\n return date.toLocaleDateString();\n }\n\n /** Badge variant class for the permission-level chip. */\n public badgeClass(level: SharePermissionLevel): string {\n switch (level) {\n case 'Owner':\n return 'badge--owner';\n case 'Edit':\n return 'badge--editor';\n default:\n return 'badge--viewer';\n }\n }\n\n public badgeLabel(level: SharePermissionLevel): string {\n switch (level) {\n case 'Owner':\n return 'Owner';\n case 'Edit':\n return 'Editor';\n default:\n return 'Viewer';\n }\n }\n\n private async loadShares(): Promise<void> {\n this.loading = true;\n this.errorMessage = null;\n this.cdr.markForCheck();\n try {\n const provider = this.ProviderToUse as unknown as GraphQLDataProvider;\n const client = new GraphQLListsClient(provider);\n this.allShares = await client.ListsSharedWithMe();\n } catch (e) {\n this.errorMessage = e instanceof Error ? e.message : String(e);\n this.allShares = [];\n } finally {\n this.loading = false;\n this.cdr.markForCheck();\n }\n }\n}\n","<div class=\"shared-with-me\">\n <!-- Toolbar -->\n <div class=\"shared-toolbar\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n class=\"mj-input\"\n type=\"text\"\n [(ngModel)]=\"filterText\"\n (ngModelChange)=\"OnFilterChange()\"\n placeholder=\"Filter shared lists…\" />\n </div>\n <select\n class=\"mj-input mj-select permission-filter\"\n [(ngModel)]=\"filterLevel\"\n (ngModelChange)=\"OnFilterChange()\"\n title=\"Filter by permission\">\n <option value=\"\">All Permissions</option>\n <option value=\"View\">Viewer</option>\n <option value=\"Edit\">Editor</option>\n <option value=\"Owner\">Owner</option>\n </select>\n <button mjButton variant=\"outline\" (click)=\"Refresh()\" [disabled]=\"loading\">\n <i class=\"fa-solid fa-rotate\"></i>\n Refresh\n </button>\n </div>\n\n @if (loading) {\n <div class=\"state-block\">\n <mj-loading text=\"Loading shared lists...\" size=\"medium\"></mj-loading>\n </div>\n } @else if (errorMessage) {\n <div class=\"state-block state-block--error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ errorMessage }}</span>\n </div>\n } @else if (visibleShares.length === 0) {\n <div class=\"state-block state-block--empty\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n <h3>No lists shared with you</h3>\n <p>When someone shares a list with you, it'll appear here.</p>\n </div>\n } @else {\n <div class=\"list-grid\">\n @for (share of visibleShares; track share.ListID) {\n <div class=\"list-card\" (click)=\"OnCardClick(share.ListID)\" tabindex=\"0\">\n <div class=\"list-card__header\">\n <div class=\"list-card__icon\">\n <i class=\"fa-solid fa-list\"></i>\n </div>\n <div class=\"list-card__title\">{{ share.ListName }}</div>\n </div>\n <div class=\"list-card__footer\">\n <span class=\"permission-badge\" [ngClass]=\"badgeClass(share.PermissionLevel)\">\n {{ badgeLabel(share.PermissionLevel) }}\n </span>\n <span class=\"list-card__shared-at\">{{ formatRelative(share.SharedAt) }}</span>\n </div>\n </div>\n }\n </div>\n }\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"shared-with-me.component.js","sourceRoot":"","sources":["../../../../src/lib/components/shared-with-me/shared-with-me.component.ts","../../../../src/lib/components/shared-with-me/shared-with-me.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, OnInit, Output, inject } from '@angular/core';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { GraphQLDataProvider, GraphQLListsClient } from '@memberjunction/graphql-dataprovider';\nimport type { SharedListSummary, SharePermissionLevel } from '@memberjunction/lists-base';\n\n/**\n * \"Shared With Me\" view (mockup 17). Lists every `MJ: List` the current\n * user has direct-share access to, plus a permission badge per row.\n *\n * Drop into the Lists app as a tab/resource. Click events bubble up via\n * `OpenList` so the host app can route through its own navigation\n * (NavigationService etc.) — keeps this component framework-agnostic.\n */\n@Component({\n standalone: false,\n selector: 'mj-lists-shared-with-me',\n templateUrl: './shared-with-me.component.html',\n styleUrls: ['./shared-with-me.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListsSharedWithMeComponent extends BaseAngularComponent implements OnInit {\n private readonly cdr = inject(ChangeDetectorRef);\n\n /** Emitted when the user clicks a card. Host wires this to navigation.\n * Includes ListName so the host can open a properly-titled tab without\n * a second fetch. */\n @Output() OpenList = new EventEmitter<{ ListID: string; ListName: string }>();\n\n /** Permission-level filter (empty = \"All Permissions\"). */\n public FilterLevel: SharePermissionLevel | '' = '';\n\n /** @deprecated Use {@link FilterLevel}. */\n public get filterLevel(): SharePermissionLevel | '' {\n return this.FilterLevel;\n }\n /** @deprecated Use {@link FilterLevel}. */\n public set filterLevel(value: SharePermissionLevel | '') {\n this.FilterLevel = value;\n }\n\n /** Free-text filter on list name. */\n public filterText = '';\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 private allShares: SharedListSummary[] = [];\n\n async ngOnInit(): Promise<void> {\n await this.loadShares();\n }\n\n public get VisibleShares(): SharedListSummary[] {\n const term = this.filterText.trim().toLowerCase();\n return this.allShares.filter((s) => {\n if (this.FilterLevel && s.PermissionLevel !== this.FilterLevel) return false;\n if (term && !s.ListName.toLowerCase().includes(term)) return false;\n return true;\n });\n }\n\n /** @deprecated Use {@link VisibleShares}. */\n public get visibleShares(): SharedListSummary[] {\n return this.VisibleShares;\n }\n\n public OnFilterChange(): void {\n this.cdr.markForCheck();\n }\n\n public OnCardClick(listId: string): void {\n const share = this.allShares.find((s) => s.ListID === listId);\n this.OpenList.emit({ ListID: listId, ListName: share?.ListName ?? '' });\n }\n\n public async Refresh(): Promise<void> {\n await this.loadShares();\n }\n\n /**\n * Friendly-format the \"shared at\" timestamp into a relative phrase\n * (\"3d ago\", \"2w ago\"). Matches the mockup; falls back to absolute on\n * older entries.\n */\n public FormatRelative(date: Date): string {\n const diffMs = Date.now() - date.getTime();\n const seconds = Math.floor(diffMs / 1000);\n if (seconds < 60) return 'just now';\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m ago`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h ago`;\n const days = Math.floor(hours / 24);\n if (days < 7) return `${days}d ago`;\n const weeks = Math.floor(days / 7);\n if (weeks < 5) return `${weeks}w ago`;\n const months = Math.floor(days / 30);\n if (months < 12) return `${months}mo ago`;\n return date.toLocaleDateString();\n }\n\n /** @deprecated Use {@link FormatRelative}. */\n public formatRelative(date: Date): string {\n return this.FormatRelative(date);\n }\n\n /** Badge variant class for the permission-level chip. */\n public BadgeClass(level: SharePermissionLevel): string {\n switch (level) {\n case 'Owner':\n return 'badge--owner';\n case 'Edit':\n return 'badge--editor';\n default:\n return 'badge--viewer';\n }\n }\n\n /** @deprecated Use {@link BadgeClass}. */\n public badgeClass(level: SharePermissionLevel): string {\n return this.BadgeClass(level);\n }\n\n public BadgeLabel(level: SharePermissionLevel): string {\n switch (level) {\n case 'Owner':\n return 'Owner';\n case 'Edit':\n return 'Editor';\n default:\n return 'Viewer';\n }\n }\n\n /** @deprecated Use {@link BadgeLabel}. */\n public badgeLabel(level: SharePermissionLevel): string {\n return this.BadgeLabel(level);\n }\n\n private async loadShares(): Promise<void> {\n this.Loading = true;\n this.errorMessage = null;\n this.cdr.markForCheck();\n try {\n const provider = this.ProviderToUse as unknown as GraphQLDataProvider;\n const client = new GraphQLListsClient(provider);\n this.allShares = await client.ListsSharedWithMe();\n } catch (e) {\n this.errorMessage = e instanceof Error ? e.message : String(e);\n this.allShares = [];\n } finally {\n this.Loading = false;\n this.cdr.markForCheck();\n }\n }\n}\n","<div class=\"shared-with-me\">\n <!-- Toolbar -->\n <div class=\"shared-toolbar\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n class=\"mj-input\"\n type=\"text\"\n [(ngModel)]=\"filterText\"\n (ngModelChange)=\"OnFilterChange()\"\n placeholder=\"Filter shared lists…\" />\n </div>\n <select\n class=\"mj-input mj-select permission-filter\"\n [(ngModel)]=\"filterLevel\"\n (ngModelChange)=\"OnFilterChange()\"\n title=\"Filter by permission\">\n <option value=\"\">All Permissions</option>\n <option value=\"View\">Viewer</option>\n <option value=\"Edit\">Editor</option>\n <option value=\"Owner\">Owner</option>\n </select>\n <button mjButton variant=\"outline\" (click)=\"Refresh()\" [disabled]=\"loading\">\n <i class=\"fa-solid fa-rotate\"></i>\n Refresh\n </button>\n </div>\n\n @if (loading) {\n <div class=\"state-block\">\n <mj-loading text=\"Loading shared lists...\" size=\"medium\"></mj-loading>\n </div>\n } @else if (errorMessage) {\n <div class=\"state-block state-block--error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ errorMessage }}</span>\n </div>\n } @else if (visibleShares.length === 0) {\n <div class=\"state-block state-block--empty\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n <h3>No lists shared with you</h3>\n <p>When someone shares a list with you, it'll appear here.</p>\n </div>\n } @else {\n <div class=\"list-grid\">\n @for (share of visibleShares; track share.ListID) {\n <div class=\"list-card\" (click)=\"OnCardClick(share.ListID)\" tabindex=\"0\">\n <div class=\"list-card__header\">\n <div class=\"list-card__icon\">\n <i class=\"fa-solid fa-list\"></i>\n </div>\n <div class=\"list-card__title\">{{ share.ListName }}</div>\n </div>\n <div class=\"list-card__footer\">\n <span class=\"permission-badge\" [ngClass]=\"badgeClass(share.PermissionLevel)\">\n {{ badgeLabel(share.PermissionLevel) }}\n </span>\n <span class=\"list-card__shared-at\">{{ formatRelative(share.SharedAt) }}</span>\n </div>\n </div>\n }\n </div>\n }\n</div>\n"]}
|
|
@@ -43,17 +43,41 @@ export declare class TagChipsComponent extends BaseAngularComponent implements O
|
|
|
43
43
|
/** Emitted after add/remove so parents can refresh dependent data. */
|
|
44
44
|
TagsChanged: EventEmitter<void>;
|
|
45
45
|
tags: DisplayTag[];
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
Loading: boolean;
|
|
47
|
+
/** @deprecated Use {@link Loading}. */
|
|
48
|
+
get loading(): boolean;
|
|
49
|
+
/** @deprecated Use {@link Loading}. */
|
|
50
|
+
set loading(value: boolean);
|
|
51
|
+
AddInput: string;
|
|
52
|
+
/** @deprecated Use {@link AddInput}. */
|
|
53
|
+
get addInput(): string;
|
|
54
|
+
/** @deprecated Use {@link AddInput}. */
|
|
55
|
+
set addInput(value: string);
|
|
56
|
+
Suggestions: MJTagEntity[];
|
|
57
|
+
/** @deprecated Use {@link Suggestions}. */
|
|
58
|
+
get suggestions(): MJTagEntity[];
|
|
59
|
+
/** @deprecated Use {@link Suggestions}. */
|
|
60
|
+
set suggestions(value: MJTagEntity[]);
|
|
61
|
+
ShowSuggestions: boolean;
|
|
62
|
+
/** @deprecated Use {@link ShowSuggestions}. */
|
|
63
|
+
get showSuggestions(): boolean;
|
|
64
|
+
/** @deprecated Use {@link ShowSuggestions}. */
|
|
65
|
+
set showSuggestions(value: boolean);
|
|
50
66
|
/** True when the trimmed input doesn't exactly match any existing tag —
|
|
51
67
|
* drives the "Create '<term>'" affordance at the top of the dropdown. */
|
|
52
|
-
|
|
68
|
+
CanCreateNew: boolean;
|
|
69
|
+
/** @deprecated Use {@link CanCreateNew}. */
|
|
70
|
+
get canCreateNew(): boolean;
|
|
71
|
+
/** @deprecated Use {@link CanCreateNew}. */
|
|
72
|
+
set canCreateNew(value: boolean);
|
|
53
73
|
private initialized;
|
|
54
74
|
private entityID;
|
|
55
75
|
ngOnInit(): Promise<void>;
|
|
76
|
+
get DisplayedTags(): DisplayTag[];
|
|
77
|
+
/** @deprecated Use {@link DisplayedTags}. */
|
|
56
78
|
get displayedTags(): DisplayTag[];
|
|
79
|
+
get ExtraTagCount(): number;
|
|
80
|
+
/** @deprecated Use {@link ExtraTagCount}. */
|
|
57
81
|
get extraTagCount(): number;
|
|
58
82
|
OnTagClick(tag: DisplayTag): void;
|
|
59
83
|
OnRemove(tag: DisplayTag, event: Event): Promise<void>;
|
|
@@ -69,7 +93,7 @@ export declare class TagChipsComponent extends BaseAngularComponent implements O
|
|
|
69
93
|
/** Click handler for the "Create '<term>'" affordance. Creates the
|
|
70
94
|
* `MJ: Tags` row then attaches it via the standard apply path. */
|
|
71
95
|
OnCreateNew(): Promise<void>;
|
|
72
|
-
private
|
|
96
|
+
private createAndAddTag;
|
|
73
97
|
private applyTagToRecord;
|
|
74
98
|
/**
|
|
75
99
|
* Bulk-load tags + their names in two RunViews — one for the join
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag-chips.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/tag-chips/tag-chips.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyD,YAAY,EAAS,MAAM,EAAkB,MAAM,eAAe,CAAC;AAEnI,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,KAAK,EAAE,WAAW,EAAsB,MAAM,+BAA+B,CAAC;;AAErF;;;;;;;;;;GAUG;AAEH,UAAU,UAAU;IAClB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAOa,iBAAkB,SAAQ,oBAAqB,YAAW,MAAM;IAC3E,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6B;IAEjD,gDAAgD;IAChD,IACI,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAKlC;IACD,IAAI,UAAU,IAAI,MAAM,GAAG,IAAI,CAE9B;IACD,OAAO,CAAC,WAAW,CAAuB;IAE1C,+DAA+D;IAC/D,IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAKhC;IACD,IAAI,QAAQ,IAAI,MAAM,GAAG,IAAI,CAE5B;IACD,OAAO,CAAC,SAAS,CAAuB;IAExC,4DAA4D;IACnD,QAAQ,UAAS;IAE1B,wEAAwE;IAC/D,UAAU,SAAK;IAExB,2EAA2E;IACjE,UAAU;eAA6B,MAAM;cAAQ,MAAM;OAAM;IAE3E,sEAAsE;IAC5D,WAAW,qBAA4B;IAE1C,IAAI,EAAE,UAAU,EAAE,CAAM;IACxB,OAAO,UAAS;
|
|
1
|
+
{"version":3,"file":"tag-chips.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/tag-chips/tag-chips.component.ts"],"names":[],"mappings":"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"}
|