@memberjunction/ng-conversations 5.22.0 → 5.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -0
- package/dist/lib/components/artifact/artifact-share-modal.component.d.ts.map +1 -1
- package/dist/lib/components/artifact/artifact-share-modal.component.js +58 -60
- package/dist/lib/components/artifact/artifact-share-modal.component.js.map +1 -1
- package/dist/lib/components/collection/artifact-collection-picker-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/artifact-collection-picker-modal.component.js +31 -32
- package/dist/lib/components/collection/artifact-collection-picker-modal.component.js.map +1 -1
- package/dist/lib/components/collection/artifact-create-modal.component.d.ts +1 -0
- package/dist/lib/components/collection/artifact-create-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/artifact-create-modal.component.js +81 -63
- package/dist/lib/components/collection/artifact-create-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-artifact-card.component.js +7 -6
- package/dist/lib/components/collection/collection-artifact-card.component.js.map +1 -1
- package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-form-modal.component.js +22 -22
- package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-share-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-share-modal.component.js +65 -67
- package/dist/lib/components/collection/collection-share-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-view.component.js +71 -59
- package/dist/lib/components/collection/collection-view.component.js.map +1 -1
- package/dist/lib/components/collection/collections-full-view.component.js +7 -8
- package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +25 -28
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +478 -572
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +7 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.js +101 -52
- package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.d.ts +3 -3
- package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.js +44 -30
- package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
- package/dist/lib/components/dialogs/input-dialog.component.d.ts +0 -3
- package/dist/lib/components/dialogs/input-dialog.component.d.ts.map +1 -1
- package/dist/lib/components/dialogs/input-dialog.component.js +12 -17
- package/dist/lib/components/dialogs/input-dialog.component.js.map +1 -1
- package/dist/lib/components/export/export-modal.component.d.ts.map +1 -1
- package/dist/lib/components/export/export-modal.component.js +23 -23
- package/dist/lib/components/export/export-modal.component.js.map +1 -1
- package/dist/lib/components/members/members-modal.component.d.ts.map +1 -1
- package/dist/lib/components/members/members-modal.component.js +96 -85
- package/dist/lib/components/members/members-modal.component.js.map +1 -1
- package/dist/lib/components/message/actionable-commands.component.d.ts +2 -2
- package/dist/lib/components/message/actionable-commands.component.d.ts.map +1 -1
- package/dist/lib/components/message/actionable-commands.component.js +9 -10
- package/dist/lib/components/message/actionable-commands.component.js.map +1 -1
- package/dist/lib/components/message/conversation-message-rating.component.d.ts +1 -1
- package/dist/lib/components/message/conversation-message-rating.component.d.ts.map +1 -1
- package/dist/lib/components/message/conversation-message-rating.component.js +1 -1
- package/dist/lib/components/message/conversation-message-rating.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts +6 -4
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +31 -21
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +14 -2
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +31 -28
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/message/message-list.component.d.ts +1 -2
- package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-list.component.js +1 -1
- package/dist/lib/components/message/message-list.component.js.map +1 -1
- package/dist/lib/components/overlay/chat-overlay.component.d.ts +157 -0
- package/dist/lib/components/overlay/chat-overlay.component.d.ts.map +1 -0
- package/dist/lib/components/overlay/chat-overlay.component.js +462 -0
- package/dist/lib/components/overlay/chat-overlay.component.js.map +1 -0
- package/dist/lib/components/project/project-form-modal.component.d.ts +2 -2
- package/dist/lib/components/project/project-form-modal.component.d.ts.map +1 -1
- package/dist/lib/components/project/project-form-modal.component.js +24 -28
- package/dist/lib/components/project/project-form-modal.component.js.map +1 -1
- package/dist/lib/components/project/project-selector.component.d.ts +4 -3
- package/dist/lib/components/project/project-selector.component.d.ts.map +1 -1
- package/dist/lib/components/project/project-selector.component.js +78 -115
- package/dist/lib/components/project/project-selector.component.js.map +1 -1
- package/dist/lib/components/search/search-panel.component.js +84 -84
- package/dist/lib/components/search/search-panel.component.js.map +1 -1
- package/dist/lib/components/share/share-modal.component.d.ts.map +1 -1
- package/dist/lib/components/share/share-modal.component.js +77 -68
- package/dist/lib/components/share/share-modal.component.js.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts +2 -3
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.js +29 -32
- package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
- package/dist/lib/conversations.module.d.ts +19 -26
- package/dist/lib/conversations.module.d.ts.map +1 -1
- package/dist/lib/conversations.module.js +20 -43
- package/dist/lib/conversations.module.js.map +1 -1
- package/dist/lib/services/active-tasks.service.d.ts +1 -3
- package/dist/lib/services/active-tasks.service.d.ts.map +1 -1
- package/dist/lib/services/active-tasks.service.js +6 -9
- package/dist/lib/services/active-tasks.service.js.map +1 -1
- package/dist/lib/services/conversation-agent.service.d.ts +9 -4
- package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.js +83 -61
- package/dist/lib/services/conversation-agent.service.js.map +1 -1
- package/dist/lib/services/dialog.service.d.ts +6 -6
- package/dist/lib/services/dialog.service.d.ts.map +1 -1
- package/dist/lib/services/dialog.service.js +26 -23
- package/dist/lib/services/dialog.service.js.map +1 -1
- package/dist/public-api.d.ts +1 -2
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -2
- package/dist/public-api.js.map +1 -1
- package/package.json +21 -27
- package/dist/lib/models/conversation-complete-query.model.d.ts +0 -95
- package/dist/lib/models/conversation-complete-query.model.d.ts.map +0 -1
- package/dist/lib/models/conversation-complete-query.model.js +0 -22
- package/dist/lib/models/conversation-complete-query.model.js.map +0 -1
- package/dist/lib/services/conversation-data.service.d.ts +0 -134
- package/dist/lib/services/conversation-data.service.d.ts.map +0 -1
- package/dist/lib/services/conversation-data.service.js +0 -287
- package/dist/lib/services/conversation-data.service.js.map +0 -1
|
@@ -5,8 +5,7 @@ import * as i0 from "@angular/core";
|
|
|
5
5
|
import * as i1 from "../../services/toast.service";
|
|
6
6
|
import * as i2 from "../../services/collection-permission.service";
|
|
7
7
|
import * as i3 from "@angular/forms";
|
|
8
|
-
import * as i4 from "@
|
|
9
|
-
import * as i5 from "@progress/kendo-angular-buttons";
|
|
8
|
+
import * as i4 from "@memberjunction/ng-ui-components";
|
|
10
9
|
function CollectionFormModalComponent_Conditional_0_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
11
10
|
i0.ɵɵelementStart(0, "div", 4)(1, "label", 5);
|
|
12
11
|
i0.ɵɵtext(2, "Parent Collection");
|
|
@@ -33,8 +32,8 @@ function CollectionFormModalComponent_Conditional_0_Conditional_15_Template(rf,
|
|
|
33
32
|
} }
|
|
34
33
|
function CollectionFormModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
35
34
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
36
|
-
i0.ɵɵelementStart(0, "
|
|
37
|
-
i0.ɵɵlistener("
|
|
35
|
+
i0.ɵɵelementStart(0, "mj-dialog", 2);
|
|
36
|
+
i0.ɵɵlistener("Close", function CollectionFormModalComponent_Conditional_0_Template_mj_dialog_Close_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
|
|
38
37
|
i0.ɵɵelementStart(1, "div", 3)(2, "div", 4)(3, "label", 5);
|
|
39
38
|
i0.ɵɵtext(4, " Name ");
|
|
40
39
|
i0.ɵɵelementStart(5, "span", 6);
|
|
@@ -54,7 +53,7 @@ function CollectionFormModalComponent_Conditional_0_Template(rf, ctx) { if (rf &
|
|
|
54
53
|
i0.ɵɵconditionalCreate(14, CollectionFormModalComponent_Conditional_0_Conditional_14_Template, 7, 1, "div", 4);
|
|
55
54
|
i0.ɵɵconditionalCreate(15, CollectionFormModalComponent_Conditional_0_Conditional_15_Template, 3, 1, "div", 9);
|
|
56
55
|
i0.ɵɵelementEnd();
|
|
57
|
-
i0.ɵɵelementStart(16, "
|
|
56
|
+
i0.ɵɵelementStart(16, "mj-dialog-actions")(17, "button", 10);
|
|
58
57
|
i0.ɵɵlistener("click", function CollectionFormModalComponent_Conditional_0_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
|
|
59
58
|
i0.ɵɵtext(18, " Cancel ");
|
|
60
59
|
i0.ɵɵelementEnd();
|
|
@@ -64,7 +63,7 @@ function CollectionFormModalComponent_Conditional_0_Template(rf, ctx) { if (rf &
|
|
|
64
63
|
i0.ɵɵelementEnd()()();
|
|
65
64
|
} if (rf & 2) {
|
|
66
65
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
67
|
-
i0.ɵɵproperty("
|
|
66
|
+
i0.ɵɵproperty("Title", (ctx_r1.collection == null ? null : ctx_r1.collection.ID) ? "Edit Collection" : "New Collection")("Width", 500)("MinWidth", 300)("Visible", true);
|
|
68
67
|
i0.ɵɵadvance(7);
|
|
69
68
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formData.name);
|
|
70
69
|
i0.ɵɵadvance(5);
|
|
@@ -76,7 +75,7 @@ function CollectionFormModalComponent_Conditional_0_Template(rf, ctx) { if (rf &
|
|
|
76
75
|
i0.ɵɵadvance(2);
|
|
77
76
|
i0.ɵɵproperty("disabled", ctx_r1.isSaving);
|
|
78
77
|
i0.ɵɵadvance(2);
|
|
79
|
-
i0.ɵɵproperty("
|
|
78
|
+
i0.ɵɵproperty("disabled", !ctx_r1.canSave || ctx_r1.isSaving);
|
|
80
79
|
i0.ɵɵadvance();
|
|
81
80
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.isSaving ? "Saving..." : "Save", " ");
|
|
82
81
|
} }
|
|
@@ -211,21 +210,22 @@ export class CollectionFormModalComponent {
|
|
|
211
210
|
this.errorMessage = '';
|
|
212
211
|
}
|
|
213
212
|
static ɵfac = function CollectionFormModalComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CollectionFormModalComponent)(i0.ɵɵdirectiveInject(i1.ToastService), i0.ɵɵdirectiveInject(i2.CollectionPermissionService)); };
|
|
214
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CollectionFormModalComponent, selectors: [["mj-collection-form-modal"]], inputs: { isOpen: "isOpen", collection: "collection", parentCollection: "parentCollection", environmentId: "environmentId", currentUser: "currentUser" }, outputs: { saved: "saved", cancelled: "cancelled" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [["nameInput", ""], [3, "
|
|
215
|
-
i0.ɵɵconditionalCreate(0, CollectionFormModalComponent_Conditional_0_Template, 21, 11, "
|
|
213
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CollectionFormModalComponent, selectors: [["mj-collection-form-modal"]], inputs: { isOpen: "isOpen", collection: "collection", parentCollection: "parentCollection", environmentId: "environmentId", currentUser: "currentUser" }, outputs: { saved: "saved", cancelled: "cancelled" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [["nameInput", ""], [3, "Title", "Width", "MinWidth", "Visible"], [3, "Close", "Title", "Width", "MinWidth", "Visible"], [1, "collection-form"], [1, "form-group"], [1, "form-label"], [1, "required"], ["type", "text", "placeholder", "Collection name", 1, "k-textbox", "form-control", 3, "ngModelChange", "keydown.enter", "ngModel"], ["placeholder", "Optional description", "rows", "3", 1, "k-textarea", "form-control", 3, "ngModelChange", "ngModel"], [1, "form-error"], ["mjButton", "", 3, "click", "disabled"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "parent-info"], [1, "fas", "fa-folder"], [1, "fas", "fa-exclamation-circle"]], template: function CollectionFormModalComponent_Template(rf, ctx) { if (rf & 1) {
|
|
214
|
+
i0.ɵɵconditionalCreate(0, CollectionFormModalComponent_Conditional_0_Template, 21, 11, "mj-dialog", 1);
|
|
216
215
|
} if (rf & 2) {
|
|
217
216
|
i0.ɵɵconditional(ctx.isOpen ? 0 : -1);
|
|
218
|
-
} }, dependencies: [i3.DefaultValueAccessor, i3.NgControlStatus, i3.NgModel, i4.
|
|
217
|
+
} }, dependencies: [i3.DefaultValueAccessor, i3.NgControlStatus, i3.NgModel, i4.MJButtonDirective, i4.MJDialogComponent, i4.MJDialogActionsComponent], styles: [".collection-form[_ngcontent-%COMP%] {\n padding: 20px 0;\n }\n\n .form-group[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n }\n\n .form-label[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: var(--mj-text-primary);\n }\n\n .required[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n }\n\n .form-control[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .parent-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n color: var(--mj-text-muted);\n }\n\n .parent-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n\n .form-error[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n border-radius: 6px;\n color: var(--mj-status-error);\n font-size: 14px;\n }\n\n .form-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n flex-shrink: 0;\n }"] });
|
|
219
218
|
}
|
|
220
219
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CollectionFormModalComponent, [{
|
|
221
220
|
type: Component,
|
|
222
221
|
args: [{ standalone: false, selector: 'mj-collection-form-modal', template: `
|
|
223
222
|
@if (isOpen) {
|
|
224
|
-
<
|
|
225
|
-
[
|
|
226
|
-
(
|
|
227
|
-
[
|
|
228
|
-
[
|
|
223
|
+
<mj-dialog
|
|
224
|
+
[Title]="collection?.ID ? 'Edit Collection' : 'New Collection'"
|
|
225
|
+
(Close)="onCancel()"
|
|
226
|
+
[Width]="500"
|
|
227
|
+
[MinWidth]="300"
|
|
228
|
+
[Visible]="true">
|
|
229
229
|
<div class="collection-form">
|
|
230
230
|
<div class="form-group">
|
|
231
231
|
<label class="form-label">
|
|
@@ -264,18 +264,18 @@ export class CollectionFormModalComponent {
|
|
|
264
264
|
</div>
|
|
265
265
|
}
|
|
266
266
|
</div>
|
|
267
|
-
<
|
|
268
|
-
<button
|
|
267
|
+
<mj-dialog-actions>
|
|
268
|
+
<button mjButton (click)="onCancel()" [disabled]="isSaving">
|
|
269
269
|
Cancel
|
|
270
270
|
</button>
|
|
271
|
-
<button
|
|
272
|
-
|
|
271
|
+
<button mjButton
|
|
272
|
+
variant="primary"
|
|
273
273
|
(click)="onSave()"
|
|
274
274
|
[disabled]="!canSave || isSaving">
|
|
275
275
|
{{ isSaving ? 'Saving...' : 'Save' }}
|
|
276
276
|
</button>
|
|
277
|
-
</
|
|
278
|
-
</
|
|
277
|
+
</mj-dialog-actions>
|
|
278
|
+
</mj-dialog>
|
|
279
279
|
}
|
|
280
280
|
`, styles: ["\n .collection-form {\n padding: 20px 0;\n }\n\n .form-group {\n margin-bottom: 20px;\n }\n\n .form-label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: var(--mj-text-primary);\n }\n\n .required {\n color: var(--mj-status-error);\n }\n\n .form-control {\n width: 100%;\n }\n\n .parent-info {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n color: var(--mj-text-muted);\n }\n\n .parent-info i {\n color: var(--mj-brand-primary);\n }\n\n .form-error {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n border-radius: 6px;\n color: var(--mj-status-error);\n font-size: 14px;\n }\n\n .form-error i {\n flex-shrink: 0;\n }\n "] }]
|
|
281
281
|
}], () => [{ type: i1.ToastService }, { type: i2.CollectionPermissionService }], { isOpen: [{
|
|
@@ -293,5 +293,5 @@ export class CollectionFormModalComponent {
|
|
|
293
293
|
}], cancelled: [{
|
|
294
294
|
type: Output
|
|
295
295
|
}] }); })();
|
|
296
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CollectionFormModalComponent, { className: "CollectionFormModalComponent", filePath: "src/lib/components/collection/collection-form-modal.component.ts", lineNumber:
|
|
296
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CollectionFormModalComponent, { className: "CollectionFormModalComponent", filePath: "src/lib/components/collection/collection-form-modal.component.ts", lineNumber: 131 }); })();
|
|
297
297
|
//# sourceMappingURL=collection-form-modal.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-form-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/collection/collection-form-modal.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\nimport { UserInfo, Metadata } from '@memberjunction/core';\nimport { MJCollectionEntity } from '@memberjunction/core-entities';\nimport { DialogService } from '../../services/dialog.service';\nimport { ToastService } from '../../services/toast.service';\nimport { CollectionPermissionService } from '../../services/collection-permission.service';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Modal for creating and editing collections\n */\n@Component({\n standalone: false,\n selector: 'mj-collection-form-modal',\n template: `\n @if (isOpen) {\n <kendo-dialog\n [title]=\"collection?.ID ? 'Edit Collection' : 'New Collection'\"\n (close)=\"onCancel()\"\n [width]=\"500\"\n [minWidth]=\"300\">\n <div class=\"collection-form\">\n <div class=\"form-group\">\n <label class=\"form-label\">\n Name <span class=\"required\">*</span>\n </label>\n <input\n type=\"text\"\n class=\"k-textbox form-control\"\n [(ngModel)]=\"formData.name\"\n placeholder=\"Collection name\"\n #nameInput\n (keydown.enter)=\"onSave()\">\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">Description</label>\n <textarea\n class=\"k-textarea form-control\"\n [(ngModel)]=\"formData.description\"\n placeholder=\"Optional description\"\n rows=\"3\">\n </textarea>\n </div>\n @if (parentCollection) {\n <div class=\"form-group\">\n <label class=\"form-label\">Parent Collection</label>\n <div class=\"parent-info\">\n <i class=\"fas fa-folder\"></i>\n <span>{{ parentCollection.Name }}</span>\n </div>\n </div>\n }\n @if (errorMessage) {\n <div class=\"form-error\">\n <i class=\"fas fa-exclamation-circle\"></i>\n {{ errorMessage }}\n </div>\n }\n </div>\n <kendo-dialog-actions>\n <button kendoButton (click)=\"onCancel()\" [disabled]=\"isSaving\">\n Cancel\n </button>\n <button kendoButton\n [primary]=\"true\"\n (click)=\"onSave()\"\n [disabled]=\"!canSave || isSaving\">\n {{ isSaving ? 'Saving...' : 'Save' }}\n </button>\n </kendo-dialog-actions>\n </kendo-dialog>\n }\n `,\n styles: [`\n .collection-form {\n padding: 20px 0;\n }\n\n .form-group {\n margin-bottom: 20px;\n }\n\n .form-label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: var(--mj-text-primary);\n }\n\n .required {\n color: var(--mj-status-error);\n }\n\n .form-control {\n width: 100%;\n }\n\n .parent-info {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n color: var(--mj-text-muted);\n }\n\n .parent-info i {\n color: var(--mj-brand-primary);\n }\n\n .form-error {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n border-radius: 6px;\n color: var(--mj-status-error);\n font-size: 14px;\n }\n\n .form-error i {\n flex-shrink: 0;\n }\n `]\n})\nexport class CollectionFormModalComponent implements OnChanges {\n @Input() isOpen: boolean = false;\n @Input() collection?: MJCollectionEntity;\n @Input() parentCollection?: MJCollectionEntity;\n @Input() environmentId!: string;\n @Input() currentUser!: UserInfo;\n\n @Output() saved = new EventEmitter<MJCollectionEntity>();\n @Output() cancelled = new EventEmitter<void>();\n\n public formData = {\n name: '',\n description: ''\n };\n\n public isSaving: boolean = false;\n public errorMessage: string = '';\n\n constructor(\n private toastService: ToastService,\n private permissionService: CollectionPermissionService\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['collection'] || changes['isOpen']) {\n if (this.isOpen && this.collection) {\n this.formData.name = this.collection.Name || '';\n this.formData.description = this.collection.Description || '';\n } else if (this.isOpen && !this.collection) {\n this.formData = { name: '', description: '' };\n }\n }\n }\n\n get canSave(): boolean {\n return this.formData.name.trim().length > 0;\n }\n\n async onSave(): Promise<void> {\n if (!this.canSave) return;\n\n this.isSaving = true;\n this.errorMessage = '';\n\n try {\n // Validate permissions before saving\n if (this.collection) {\n // Editing existing collection - need Edit permission\n if (this.collection.OwnerID && !UUIDsEqual(this.collection.OwnerID, this.currentUser.ID)) {\n const permission = await this.permissionService.checkPermission(\n this.collection.ID,\n this.currentUser.ID,\n this.currentUser\n );\n\n if (!permission?.canEdit) {\n this.errorMessage = 'You do not have Edit permission for this collection.';\n this.isSaving = false;\n return;\n }\n }\n } else if (this.parentCollection) {\n // Creating child collection - need Edit permission on parent\n if (this.parentCollection.OwnerID && !UUIDsEqual(this.parentCollection.OwnerID, this.currentUser.ID)) {\n const permission = await this.permissionService.checkPermission(\n this.parentCollection.ID,\n this.currentUser.ID,\n this.currentUser\n );\n\n if (!permission?.canEdit) {\n this.errorMessage = 'You do not have Edit permission for the parent collection.';\n this.isSaving = false;\n return;\n }\n }\n }\n\n const md = new Metadata();\n const collection = this.collection ||\n await md.GetEntityObject<MJCollectionEntity>('MJ: Collections', this.currentUser);\n\n collection.Name = this.formData.name.trim();\n collection.Description = this.formData.description.trim() || null;\n collection.EnvironmentID = this.environmentId;\n\n // Set owner and parent relationship if creating new collection\n if (!this.collection) {\n if (this.parentCollection) {\n // Child collection inherits parent's owner to maintain permission hierarchy\n collection.ParentID = this.parentCollection.ID;\n collection.OwnerID = this.parentCollection.OwnerID || this.currentUser.ID;\n } else {\n // Root collection - current user becomes owner\n collection.OwnerID = this.currentUser.ID;\n }\n } else if (this.parentCollection) {\n // Updating existing collection's parent\n collection.ParentID = this.parentCollection.ID;\n }\n\n const saved = await collection.Save();\n if (saved) {\n // If creating new collection, set up permissions\n if (!this.collection) {\n if (this.parentCollection) {\n // Child collection - copy all permissions from parent (including owner)\n await this.permissionService.copyParentPermissions(\n this.parentCollection.ID,\n collection.ID,\n this.currentUser\n );\n } else {\n // Root collection - create owner permission for current user\n await this.permissionService.createOwnerPermission(\n collection.ID,\n this.currentUser.ID,\n this.currentUser\n );\n }\n }\n\n this.toastService.success(\n this.collection ? 'Collection updated successfully' : 'Collection created successfully'\n );\n this.saved.emit(collection);\n this.resetForm();\n } else {\n this.errorMessage = collection.LatestResult?.Message || 'Failed to save collection';\n this.toastService.error(this.errorMessage);\n }\n } catch (error) {\n console.error('Error saving collection:', error);\n this.errorMessage = 'An unexpected error occurred';\n this.toastService.error(this.errorMessage);\n } finally {\n this.isSaving = false;\n }\n }\n\n onCancel(): void {\n this.resetForm();\n this.cancelled.emit();\n }\n\n private resetForm(): void {\n this.formData = {\n name: '',\n description: ''\n };\n this.errorMessage = '';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"collection-form-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/collection/collection-form-modal.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\nimport { UserInfo, Metadata } from '@memberjunction/core';\nimport { MJCollectionEntity } from '@memberjunction/core-entities';\nimport { DialogService } from '../../services/dialog.service';\nimport { ToastService } from '../../services/toast.service';\nimport { CollectionPermissionService } from '../../services/collection-permission.service';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Modal for creating and editing collections\n */\n@Component({\n standalone: false,\n selector: 'mj-collection-form-modal',\n template: `\n @if (isOpen) {\n <mj-dialog\n [Title]=\"collection?.ID ? 'Edit Collection' : 'New Collection'\"\n (Close)=\"onCancel()\"\n [Width]=\"500\"\n [MinWidth]=\"300\"\n [Visible]=\"true\">\n <div class=\"collection-form\">\n <div class=\"form-group\">\n <label class=\"form-label\">\n Name <span class=\"required\">*</span>\n </label>\n <input\n type=\"text\"\n class=\"k-textbox form-control\"\n [(ngModel)]=\"formData.name\"\n placeholder=\"Collection name\"\n #nameInput\n (keydown.enter)=\"onSave()\">\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">Description</label>\n <textarea\n class=\"k-textarea form-control\"\n [(ngModel)]=\"formData.description\"\n placeholder=\"Optional description\"\n rows=\"3\">\n </textarea>\n </div>\n @if (parentCollection) {\n <div class=\"form-group\">\n <label class=\"form-label\">Parent Collection</label>\n <div class=\"parent-info\">\n <i class=\"fas fa-folder\"></i>\n <span>{{ parentCollection.Name }}</span>\n </div>\n </div>\n }\n @if (errorMessage) {\n <div class=\"form-error\">\n <i class=\"fas fa-exclamation-circle\"></i>\n {{ errorMessage }}\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton (click)=\"onCancel()\" [disabled]=\"isSaving\">\n Cancel\n </button>\n <button mjButton\n variant=\"primary\"\n (click)=\"onSave()\"\n [disabled]=\"!canSave || isSaving\">\n {{ isSaving ? 'Saving...' : 'Save' }}\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n }\n `,\n styles: [`\n .collection-form {\n padding: 20px 0;\n }\n\n .form-group {\n margin-bottom: 20px;\n }\n\n .form-label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: var(--mj-text-primary);\n }\n\n .required {\n color: var(--mj-status-error);\n }\n\n .form-control {\n width: 100%;\n }\n\n .parent-info {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n color: var(--mj-text-muted);\n }\n\n .parent-info i {\n color: var(--mj-brand-primary);\n }\n\n .form-error {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n border-radius: 6px;\n color: var(--mj-status-error);\n font-size: 14px;\n }\n\n .form-error i {\n flex-shrink: 0;\n }\n `]\n})\nexport class CollectionFormModalComponent implements OnChanges {\n @Input() isOpen: boolean = false;\n @Input() collection?: MJCollectionEntity;\n @Input() parentCollection?: MJCollectionEntity;\n @Input() environmentId!: string;\n @Input() currentUser!: UserInfo;\n\n @Output() saved = new EventEmitter<MJCollectionEntity>();\n @Output() cancelled = new EventEmitter<void>();\n\n public formData = {\n name: '',\n description: ''\n };\n\n public isSaving: boolean = false;\n public errorMessage: string = '';\n\n constructor(\n private toastService: ToastService,\n private permissionService: CollectionPermissionService\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['collection'] || changes['isOpen']) {\n if (this.isOpen && this.collection) {\n this.formData.name = this.collection.Name || '';\n this.formData.description = this.collection.Description || '';\n } else if (this.isOpen && !this.collection) {\n this.formData = { name: '', description: '' };\n }\n }\n }\n\n get canSave(): boolean {\n return this.formData.name.trim().length > 0;\n }\n\n async onSave(): Promise<void> {\n if (!this.canSave) return;\n\n this.isSaving = true;\n this.errorMessage = '';\n\n try {\n // Validate permissions before saving\n if (this.collection) {\n // Editing existing collection - need Edit permission\n if (this.collection.OwnerID && !UUIDsEqual(this.collection.OwnerID, this.currentUser.ID)) {\n const permission = await this.permissionService.checkPermission(\n this.collection.ID,\n this.currentUser.ID,\n this.currentUser\n );\n\n if (!permission?.canEdit) {\n this.errorMessage = 'You do not have Edit permission for this collection.';\n this.isSaving = false;\n return;\n }\n }\n } else if (this.parentCollection) {\n // Creating child collection - need Edit permission on parent\n if (this.parentCollection.OwnerID && !UUIDsEqual(this.parentCollection.OwnerID, this.currentUser.ID)) {\n const permission = await this.permissionService.checkPermission(\n this.parentCollection.ID,\n this.currentUser.ID,\n this.currentUser\n );\n\n if (!permission?.canEdit) {\n this.errorMessage = 'You do not have Edit permission for the parent collection.';\n this.isSaving = false;\n return;\n }\n }\n }\n\n const md = new Metadata();\n const collection = this.collection ||\n await md.GetEntityObject<MJCollectionEntity>('MJ: Collections', this.currentUser);\n\n collection.Name = this.formData.name.trim();\n collection.Description = this.formData.description.trim() || null;\n collection.EnvironmentID = this.environmentId;\n\n // Set owner and parent relationship if creating new collection\n if (!this.collection) {\n if (this.parentCollection) {\n // Child collection inherits parent's owner to maintain permission hierarchy\n collection.ParentID = this.parentCollection.ID;\n collection.OwnerID = this.parentCollection.OwnerID || this.currentUser.ID;\n } else {\n // Root collection - current user becomes owner\n collection.OwnerID = this.currentUser.ID;\n }\n } else if (this.parentCollection) {\n // Updating existing collection's parent\n collection.ParentID = this.parentCollection.ID;\n }\n\n const saved = await collection.Save();\n if (saved) {\n // If creating new collection, set up permissions\n if (!this.collection) {\n if (this.parentCollection) {\n // Child collection - copy all permissions from parent (including owner)\n await this.permissionService.copyParentPermissions(\n this.parentCollection.ID,\n collection.ID,\n this.currentUser\n );\n } else {\n // Root collection - create owner permission for current user\n await this.permissionService.createOwnerPermission(\n collection.ID,\n this.currentUser.ID,\n this.currentUser\n );\n }\n }\n\n this.toastService.success(\n this.collection ? 'Collection updated successfully' : 'Collection created successfully'\n );\n this.saved.emit(collection);\n this.resetForm();\n } else {\n this.errorMessage = collection.LatestResult?.Message || 'Failed to save collection';\n this.toastService.error(this.errorMessage);\n }\n } catch (error) {\n console.error('Error saving collection:', error);\n this.errorMessage = 'An unexpected error occurred';\n this.toastService.error(this.errorMessage);\n } finally {\n this.isSaving = false;\n }\n }\n\n onCancel(): void {\n this.resetForm();\n this.cancelled.emit();\n }\n\n private resetForm(): void {\n this.formData = {\n name: '',\n description: ''\n };\n this.errorMessage = '';\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-share-modal.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/collection/collection-share-modal.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"collection-share-modal.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/collection/collection-share-modal.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAI5H,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAChI,OAAO,EAAuB,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;;AAGxF,UAAU,iBAAkB,SAAQ,oBAAoB;IACpD,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,aAAa,CAAC;CACrC;AAED,qBAgNa,6BAA8B,YAAW,MAAM,EAAE,SAAS;IAsB/D,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,GAAG;IAtBN,MAAM,EAAE,OAAO,CAAS;IACxB,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAAQ;IAC7C,WAAW,EAAG,QAAQ,CAAC;IACvB,sBAAsB,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IAE1D,KAAK,qBAA4B;IACjC,SAAS,qBAA4B;IAE/C,WAAW,EAAE,iBAAiB,EAAE,CAAM;IACtC,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAC7C,oBAAoB,EAAE,MAAM,EAAE,CAAM;IACpC,oBAAoB,EAAE,OAAO,CAAS;IAEtC,cAAc,EAAE,aAAa,CAK3B;gBAGU,iBAAiB,EAAE,2BAA2B,EAC9C,GAAG,EAAE,iBAAiB;IAG5B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQzB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAa1C,eAAe;IAiB7B,OAAO,CAAC,0BAA0B;IA0BlC,kBAAkB,IAAI,MAAM,EAAE;IAS9B,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAK5C,gBAAgB,IAAI,IAAI;IAWlB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAqChC,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAKrD,YAAY,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAW3C,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC9D,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBtE,QAAQ,IAAI,IAAI;yCA7NP,6BAA6B;2CAA7B,6BAA6B;CAgOzC"}
|