@memberjunction/ng-list-management 5.21.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/dist/lib/components/list-share-dialog/list-share-dialog.component.js +96 -101
- package/dist/lib/components/list-share-dialog/list-share-dialog.component.js.map +1 -1
- package/dist/lib/module.d.ts +4 -31
- package/dist/lib/module.d.ts.map +1 -1
- package/dist/lib/module.js +13 -44
- package/dist/lib/module.js.map +1 -1
- package/package.json +8 -12
|
@@ -5,21 +5,15 @@ import { Metadata } from '@memberjunction/core';
|
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "../../services/list-sharing.service";
|
|
7
7
|
import * as i2 from "@angular/forms";
|
|
8
|
-
import * as i3 from "@
|
|
9
|
-
import * as i4 from "@
|
|
10
|
-
import * as i5 from "@progress/kendo-angular-inputs";
|
|
11
|
-
import * as i6 from "@progress/kendo-angular-dropdowns";
|
|
12
|
-
import * as i7 from "@memberjunction/ng-shared-generic";
|
|
8
|
+
import * as i3 from "@memberjunction/ng-ui-components";
|
|
9
|
+
import * as i4 from "@memberjunction/ng-shared-generic";
|
|
13
10
|
function ListShareDialogComponent_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
14
|
-
i0.ɵɵelementStart(0, "div",
|
|
15
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
11
|
+
i0.ɵɵelementStart(0, "div", 4);
|
|
12
|
+
i0.ɵɵelement(1, "mj-loading", 7);
|
|
16
13
|
i0.ɵɵelementEnd();
|
|
17
14
|
} }
|
|
18
|
-
function
|
|
19
|
-
i0.ɵɵ
|
|
20
|
-
} }
|
|
21
|
-
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_13_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
22
|
-
i0.ɵɵelementStart(0, "span", 27);
|
|
15
|
+
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
+
i0.ɵɵelementStart(0, "span", 28);
|
|
23
17
|
i0.ɵɵtext(1);
|
|
24
18
|
i0.ɵɵelementEnd();
|
|
25
19
|
} if (rf & 2) {
|
|
@@ -27,15 +21,15 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Cond
|
|
|
27
21
|
i0.ɵɵadvance();
|
|
28
22
|
i0.ɵɵtextInterpolate(recipient_r5.email);
|
|
29
23
|
} }
|
|
30
|
-
function
|
|
24
|
+
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
31
25
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
32
|
-
i0.ɵɵelementStart(0, "div",
|
|
33
|
-
i0.ɵɵlistener("mousedown", function
|
|
26
|
+
i0.ɵɵelementStart(0, "div", 25);
|
|
27
|
+
i0.ɵɵlistener("mousedown", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_For_2_Template_div_mousedown_0_listener() { const recipient_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.selectRecipient(recipient_r5)); });
|
|
34
28
|
i0.ɵɵelement(1, "i");
|
|
35
|
-
i0.ɵɵelementStart(2, "div",
|
|
29
|
+
i0.ɵɵelementStart(2, "div", 26)(3, "span", 27);
|
|
36
30
|
i0.ɵɵtext(4);
|
|
37
31
|
i0.ɵɵelementEnd();
|
|
38
|
-
i0.ɵɵconditionalCreate(5,
|
|
32
|
+
i0.ɵɵconditionalCreate(5, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_For_2_Conditional_5_Template, 2, 1, "span", 28);
|
|
39
33
|
i0.ɵɵelementEnd()();
|
|
40
34
|
} if (rf & 2) {
|
|
41
35
|
const recipient_r5 = ctx.$implicit;
|
|
@@ -47,20 +41,20 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Cond
|
|
|
47
41
|
i0.ɵɵadvance();
|
|
48
42
|
i0.ɵɵconditional(recipient_r5.email ? 5 : -1);
|
|
49
43
|
} }
|
|
50
|
-
function
|
|
51
|
-
i0.ɵɵelementStart(0, "div",
|
|
52
|
-
i0.ɵɵrepeaterCreate(1,
|
|
44
|
+
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
45
|
+
i0.ɵɵelementStart(0, "div", 22);
|
|
46
|
+
i0.ɵɵrepeaterCreate(1, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_For_2_Template, 6, 4, "div", 24, i0.ɵɵrepeaterTrackByIdentity);
|
|
53
47
|
i0.ɵɵelementEnd();
|
|
54
48
|
} if (rf & 2) {
|
|
55
49
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
56
50
|
i0.ɵɵadvance();
|
|
57
51
|
i0.ɵɵrepeater(ctx_r1.searchResults);
|
|
58
52
|
} }
|
|
59
|
-
function
|
|
60
|
-
i0.ɵɵelementStart(0, "div",
|
|
53
|
+
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_15_ng_template_8_Template(rf, ctx) { if (rf & 1) {
|
|
54
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "span", 36);
|
|
61
55
|
i0.ɵɵtext(2);
|
|
62
56
|
i0.ɵɵelementEnd();
|
|
63
|
-
i0.ɵɵelementStart(3, "span",
|
|
57
|
+
i0.ɵɵelementStart(3, "span", 37);
|
|
64
58
|
i0.ɵɵtext(4);
|
|
65
59
|
i0.ɵɵelementEnd()();
|
|
66
60
|
} if (rf & 2) {
|
|
@@ -70,24 +64,25 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Cond
|
|
|
70
64
|
i0.ɵɵadvance(2);
|
|
71
65
|
i0.ɵɵtextInterpolate(dataItem_r7.description);
|
|
72
66
|
} }
|
|
73
|
-
function
|
|
67
|
+
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
74
68
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
75
|
-
i0.ɵɵelementStart(0, "div",
|
|
69
|
+
i0.ɵɵelementStart(0, "div", 23)(1, "div", 29);
|
|
76
70
|
i0.ɵɵelement(2, "i");
|
|
77
71
|
i0.ɵɵelementStart(3, "span");
|
|
78
72
|
i0.ɵɵtext(4);
|
|
79
73
|
i0.ɵɵelementEnd();
|
|
80
|
-
i0.ɵɵelementStart(5, "button",
|
|
81
|
-
i0.ɵɵlistener("click", function
|
|
74
|
+
i0.ɵɵelementStart(5, "button", 30);
|
|
75
|
+
i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_15_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.clearSearch()); });
|
|
76
|
+
i0.ɵɵelement(6, "i", 31);
|
|
82
77
|
i0.ɵɵelementEnd()();
|
|
83
|
-
i0.ɵɵelementStart(
|
|
84
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
85
|
-
i0.ɵɵtemplate(
|
|
78
|
+
i0.ɵɵelementStart(7, "mj-dropdown", 32);
|
|
79
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_15_Template_mj_dropdown_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedPermission, $event) || (ctx_r1.selectedPermission = $event); return i0.ɵɵresetView($event); });
|
|
80
|
+
i0.ɵɵtemplate(8, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_15_ng_template_8_Template, 5, 2, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
86
81
|
i0.ɵɵelementEnd();
|
|
87
|
-
i0.ɵɵelementStart(
|
|
88
|
-
i0.ɵɵlistener("click", function
|
|
89
|
-
i0.ɵɵelement(
|
|
90
|
-
i0.ɵɵtext(
|
|
82
|
+
i0.ɵɵelementStart(10, "button", 33);
|
|
83
|
+
i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_15_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.addShare()); });
|
|
84
|
+
i0.ɵɵelement(11, "i", 34);
|
|
85
|
+
i0.ɵɵtext(12, " Add ");
|
|
91
86
|
i0.ɵɵelementEnd()();
|
|
92
87
|
} if (rf & 2) {
|
|
93
88
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -95,56 +90,55 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Cond
|
|
|
95
90
|
i0.ɵɵclassMap(ctx_r1.getShareTypeIcon(ctx_r1.selectedRecipient.type));
|
|
96
91
|
i0.ɵɵadvance(2);
|
|
97
92
|
i0.ɵɵtextInterpolate(ctx_r1.selectedRecipient.name);
|
|
98
|
-
i0.ɵɵadvance();
|
|
99
|
-
i0.ɵɵproperty("
|
|
100
|
-
i0.ɵɵadvance();
|
|
101
|
-
i0.ɵɵproperty("data", ctx_r1.permissionOptions)("textField", "label")("valueField", "value");
|
|
93
|
+
i0.ɵɵadvance(3);
|
|
94
|
+
i0.ɵɵproperty("Data", ctx_r1.permissionOptions);
|
|
102
95
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.selectedPermission);
|
|
103
|
-
i0.ɵɵproperty("
|
|
104
|
-
i0.ɵɵadvance(
|
|
96
|
+
i0.ɵɵproperty("ValuePrimitive", true);
|
|
97
|
+
i0.ɵɵadvance(3);
|
|
105
98
|
i0.ɵɵproperty("disabled", ctx_r1.saving);
|
|
106
99
|
} }
|
|
107
100
|
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
108
101
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
109
|
-
i0.ɵɵelementStart(0, "div",
|
|
102
|
+
i0.ɵɵelementStart(0, "div", 8)(1, "h4", 13);
|
|
110
103
|
i0.ɵɵtext(2, "Add people or roles");
|
|
111
104
|
i0.ɵɵelementEnd();
|
|
112
|
-
i0.ɵɵelementStart(3, "div",
|
|
105
|
+
i0.ɵɵelementStart(3, "div", 14)(4, "button", 15);
|
|
113
106
|
i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setSearchType("User")); });
|
|
114
|
-
i0.ɵɵelement(5, "i",
|
|
107
|
+
i0.ɵɵelement(5, "i", 16);
|
|
115
108
|
i0.ɵɵtext(6, " Users ");
|
|
116
109
|
i0.ɵɵelementEnd();
|
|
117
|
-
i0.ɵɵelementStart(7, "button",
|
|
110
|
+
i0.ɵɵelementStart(7, "button", 15);
|
|
118
111
|
i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setSearchType("Role")); });
|
|
119
|
-
i0.ɵɵelement(8, "i",
|
|
112
|
+
i0.ɵɵelement(8, "i", 17);
|
|
120
113
|
i0.ɵɵtext(9, " Roles ");
|
|
121
114
|
i0.ɵɵelementEnd()();
|
|
122
|
-
i0.ɵɵelementStart(10, "div",
|
|
123
|
-
i0.ɵɵ
|
|
124
|
-
i0.ɵɵ
|
|
125
|
-
i0.ɵɵ
|
|
126
|
-
i0.ɵɵ
|
|
115
|
+
i0.ɵɵelementStart(10, "div", 18)(11, "div", 19);
|
|
116
|
+
i0.ɵɵelement(12, "i", 20);
|
|
117
|
+
i0.ɵɵelementStart(13, "input", 21);
|
|
118
|
+
i0.ɵɵlistener("input", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Template_input_input_13_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onSearchInput($event.target.value)); })("blur", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Template_input_blur_13_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.showSearchResults = false); });
|
|
119
|
+
i0.ɵɵelementEnd()();
|
|
120
|
+
i0.ɵɵconditionalCreate(14, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_Template, 3, 0, "div", 22);
|
|
127
121
|
i0.ɵɵelementEnd();
|
|
128
|
-
i0.ɵɵconditionalCreate(
|
|
122
|
+
i0.ɵɵconditionalCreate(15, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_15_Template, 13, 7, "div", 23);
|
|
129
123
|
i0.ɵɵelementEnd();
|
|
130
124
|
} if (rf & 2) {
|
|
131
125
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
132
126
|
i0.ɵɵadvance(4);
|
|
133
|
-
i0.ɵɵproperty("
|
|
127
|
+
i0.ɵɵproperty("variant", ctx_r1.searchType === "User" ? "primary" : "outline");
|
|
134
128
|
i0.ɵɵadvance(3);
|
|
135
|
-
i0.ɵɵproperty("
|
|
136
|
-
i0.ɵɵadvance(
|
|
137
|
-
i0.ɵɵproperty("value", ctx_r1.searchText)("placeholder", "Search for " + (ctx_r1.searchType === "User" ? "users" : "roles") + "...")
|
|
138
|
-
i0.ɵɵadvance(
|
|
139
|
-
i0.ɵɵconditional(ctx_r1.showSearchResults && ctx_r1.searchResults.length > 0 ?
|
|
129
|
+
i0.ɵɵproperty("variant", ctx_r1.searchType === "Role" ? "primary" : "outline");
|
|
130
|
+
i0.ɵɵadvance(6);
|
|
131
|
+
i0.ɵɵproperty("value", ctx_r1.searchText)("placeholder", "Search for " + (ctx_r1.searchType === "User" ? "users" : "roles") + "...");
|
|
132
|
+
i0.ɵɵadvance();
|
|
133
|
+
i0.ɵɵconditional(ctx_r1.showSearchResults && ctx_r1.searchResults.length > 0 ? 14 : -1);
|
|
140
134
|
i0.ɵɵadvance();
|
|
141
|
-
i0.ɵɵconditional(ctx_r1.selectedRecipient ?
|
|
135
|
+
i0.ɵɵconditional(ctx_r1.selectedRecipient ? 15 : -1);
|
|
142
136
|
} }
|
|
143
137
|
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
144
|
-
i0.ɵɵelement(0, "hr",
|
|
138
|
+
i0.ɵɵelement(0, "hr", 9);
|
|
145
139
|
} }
|
|
146
140
|
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
147
|
-
i0.ɵɵelementStart(0, "span",
|
|
141
|
+
i0.ɵɵelementStart(0, "span", 44);
|
|
148
142
|
i0.ɵɵtext(1);
|
|
149
143
|
i0.ɵɵelementEnd();
|
|
150
144
|
} if (rf & 2) {
|
|
@@ -153,22 +147,22 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_
|
|
|
153
147
|
i0.ɵɵtextInterpolate(share_r8.recipientEmail);
|
|
154
148
|
} }
|
|
155
149
|
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
156
|
-
i0.ɵɵelementStart(0, "span",
|
|
150
|
+
i0.ɵɵelementStart(0, "span", 45);
|
|
157
151
|
i0.ɵɵtext(1, "Role");
|
|
158
152
|
i0.ɵɵelementEnd();
|
|
159
153
|
} }
|
|
160
154
|
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
161
155
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
162
|
-
i0.ɵɵelementStart(0, "
|
|
163
|
-
i0.ɵɵlistener("
|
|
156
|
+
i0.ɵɵelementStart(0, "mj-dropdown", 50);
|
|
157
|
+
i0.ɵɵlistener("ValueChange", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_9_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const share_r8 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.updateSharePermission(share_r8, $event)); });
|
|
164
158
|
i0.ɵɵelementEnd();
|
|
165
159
|
} if (rf & 2) {
|
|
166
160
|
const share_r8 = i0.ɵɵnextContext().$implicit;
|
|
167
161
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
168
|
-
i0.ɵɵproperty("
|
|
162
|
+
i0.ɵɵproperty("Data", ctx_r1.permissionOptions)("ngModel", share_r8.permissionLevel)("ValuePrimitive", true)("Disabled", ctx_r1.saving);
|
|
169
163
|
} }
|
|
170
164
|
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
171
|
-
i0.ɵɵelementStart(0, "span",
|
|
165
|
+
i0.ɵɵelementStart(0, "span", 48);
|
|
172
166
|
i0.ɵɵtext(1);
|
|
173
167
|
i0.ɵɵelementEnd();
|
|
174
168
|
} if (rf & 2) {
|
|
@@ -179,26 +173,27 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_
|
|
|
179
173
|
} }
|
|
180
174
|
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
181
175
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
182
|
-
i0.ɵɵelementStart(0, "button",
|
|
176
|
+
i0.ɵɵelementStart(0, "button", 51);
|
|
183
177
|
i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const share_r8 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.removeShare(share_r8)); });
|
|
178
|
+
i0.ɵɵelement(1, "i", 52);
|
|
184
179
|
i0.ɵɵelementEnd();
|
|
185
180
|
} if (rf & 2) {
|
|
186
181
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
187
|
-
i0.ɵɵproperty("
|
|
182
|
+
i0.ɵɵproperty("disabled", ctx_r1.saving);
|
|
188
183
|
} }
|
|
189
184
|
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
190
|
-
i0.ɵɵelementStart(0, "div",
|
|
191
|
-
i0.ɵɵelement(2, "i",
|
|
192
|
-
i0.ɵɵelementStart(3, "div",
|
|
185
|
+
i0.ɵɵelementStart(0, "div", 39)(1, "div", 40);
|
|
186
|
+
i0.ɵɵelement(2, "i", 41);
|
|
187
|
+
i0.ɵɵelementStart(3, "div", 42)(4, "span", 43);
|
|
193
188
|
i0.ɵɵtext(5);
|
|
194
189
|
i0.ɵɵelementEnd();
|
|
195
|
-
i0.ɵɵconditionalCreate(6, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_6_Template, 2, 1, "span",
|
|
196
|
-
i0.ɵɵconditionalCreate(7, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_7_Template, 2, 0, "span",
|
|
190
|
+
i0.ɵɵconditionalCreate(6, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_6_Template, 2, 1, "span", 44);
|
|
191
|
+
i0.ɵɵconditionalCreate(7, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_7_Template, 2, 0, "span", 45);
|
|
197
192
|
i0.ɵɵelementEnd()();
|
|
198
|
-
i0.ɵɵelementStart(8, "div",
|
|
199
|
-
i0.ɵɵconditionalCreate(9, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_9_Template, 1,
|
|
200
|
-
i0.ɵɵconditionalCreate(10, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_10_Template, 2, 1, "span",
|
|
201
|
-
i0.ɵɵconditionalCreate(11, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_11_Template,
|
|
193
|
+
i0.ɵɵelementStart(8, "div", 46);
|
|
194
|
+
i0.ɵɵconditionalCreate(9, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_9_Template, 1, 4, "mj-dropdown", 47);
|
|
195
|
+
i0.ɵɵconditionalCreate(10, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_10_Template, 2, 1, "span", 48);
|
|
196
|
+
i0.ɵɵconditionalCreate(11, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_11_Template, 2, 1, "button", 49);
|
|
202
197
|
i0.ɵɵelementEnd()();
|
|
203
198
|
} if (rf & 2) {
|
|
204
199
|
const share_r8 = ctx.$implicit;
|
|
@@ -219,11 +214,11 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_
|
|
|
219
214
|
i0.ɵɵconditional(ctx_r1.canModifyShares ? 11 : -1);
|
|
220
215
|
} }
|
|
221
216
|
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
222
|
-
i0.ɵɵelementStart(0, "div",
|
|
217
|
+
i0.ɵɵelementStart(0, "div", 10)(1, "h4", 13);
|
|
223
218
|
i0.ɵɵtext(2, "People with access");
|
|
224
219
|
i0.ɵɵelementEnd();
|
|
225
|
-
i0.ɵɵelementStart(3, "div",
|
|
226
|
-
i0.ɵɵrepeaterCreate(4, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Template, 12, 8, "div",
|
|
220
|
+
i0.ɵɵelementStart(3, "div", 38);
|
|
221
|
+
i0.ɵɵrepeaterCreate(4, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Template, 12, 8, "div", 39, i0.ɵɵrepeaterTrackByIdentity);
|
|
227
222
|
i0.ɵɵelementEnd()();
|
|
228
223
|
} if (rf & 2) {
|
|
229
224
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -231,17 +226,17 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_Temp
|
|
|
231
226
|
i0.ɵɵrepeater(ctx_r1.currentShares);
|
|
232
227
|
} }
|
|
233
228
|
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
234
|
-
i0.ɵɵelementStart(0, "p",
|
|
229
|
+
i0.ɵɵelementStart(0, "p", 54);
|
|
235
230
|
i0.ɵɵtext(1, " Use the search above to find users or roles to share with. ");
|
|
236
231
|
i0.ɵɵelementEnd();
|
|
237
232
|
} }
|
|
238
233
|
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
239
|
-
i0.ɵɵelementStart(0, "div",
|
|
240
|
-
i0.ɵɵelement(1, "i",
|
|
234
|
+
i0.ɵɵelementStart(0, "div", 11);
|
|
235
|
+
i0.ɵɵelement(1, "i", 53);
|
|
241
236
|
i0.ɵɵelementStart(2, "p");
|
|
242
237
|
i0.ɵɵtext(3, "This list hasn't been shared with anyone yet.");
|
|
243
238
|
i0.ɵɵelementEnd();
|
|
244
|
-
i0.ɵɵconditionalCreate(4, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_3_Conditional_4_Template, 2, 0, "p",
|
|
239
|
+
i0.ɵɵconditionalCreate(4, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_3_Conditional_4_Template, 2, 0, "p", 54);
|
|
245
240
|
i0.ɵɵelementEnd();
|
|
246
241
|
} if (rf & 2) {
|
|
247
242
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -249,18 +244,18 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_3_Temp
|
|
|
249
244
|
i0.ɵɵconditional(ctx_r1.canModifyShares ? 4 : -1);
|
|
250
245
|
} }
|
|
251
246
|
function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
252
|
-
i0.ɵɵelementStart(0, "div",
|
|
253
|
-
i0.ɵɵelement(1, "i",
|
|
247
|
+
i0.ɵɵelementStart(0, "div", 12);
|
|
248
|
+
i0.ɵɵelement(1, "i", 55);
|
|
254
249
|
i0.ɵɵelementStart(2, "span");
|
|
255
250
|
i0.ɵɵtext(3, "Only the list owner can manage sharing.");
|
|
256
251
|
i0.ɵɵelementEnd()();
|
|
257
252
|
} }
|
|
258
253
|
function ListShareDialogComponent_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
259
|
-
i0.ɵɵconditionalCreate(0, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Template,
|
|
260
|
-
i0.ɵɵconditionalCreate(1, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_1_Template, 1, 0, "hr",
|
|
261
|
-
i0.ɵɵconditionalCreate(2, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_Template, 6, 0, "div",
|
|
262
|
-
i0.ɵɵconditionalCreate(3, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_3_Template, 5, 1, "div",
|
|
263
|
-
i0.ɵɵconditionalCreate(4, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_4_Template, 4, 0, "div",
|
|
254
|
+
i0.ɵɵconditionalCreate(0, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Template, 16, 6, "div", 8);
|
|
255
|
+
i0.ɵɵconditionalCreate(1, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_1_Template, 1, 0, "hr", 9);
|
|
256
|
+
i0.ɵɵconditionalCreate(2, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_Template, 6, 0, "div", 10);
|
|
257
|
+
i0.ɵɵconditionalCreate(3, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_3_Template, 5, 1, "div", 11);
|
|
258
|
+
i0.ɵɵconditionalCreate(4, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_4_Template, 4, 0, "div", 12);
|
|
264
259
|
} if (rf & 2) {
|
|
265
260
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
266
261
|
i0.ɵɵconditional(ctx_r1.canModifyShares ? 0 : -1);
|
|
@@ -275,23 +270,23 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Template(rf, ctx)
|
|
|
275
270
|
} }
|
|
276
271
|
function ListShareDialogComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
277
272
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
278
|
-
i0.ɵɵelementStart(0, "
|
|
279
|
-
i0.ɵɵlistener("
|
|
280
|
-
i0.ɵɵelementStart(1, "div",
|
|
281
|
-
i0.ɵɵconditionalCreate(2, ListShareDialogComponent_Conditional_0_Conditional_2_Template, 2, 0, "div",
|
|
273
|
+
i0.ɵɵelementStart(0, "mj-dialog", 2);
|
|
274
|
+
i0.ɵɵlistener("Close", function ListShareDialogComponent_Conditional_0_Template_mj_dialog_Close_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
|
|
275
|
+
i0.ɵɵelementStart(1, "div", 3);
|
|
276
|
+
i0.ɵɵconditionalCreate(2, ListShareDialogComponent_Conditional_0_Conditional_2_Template, 2, 0, "div", 4);
|
|
282
277
|
i0.ɵɵconditionalCreate(3, ListShareDialogComponent_Conditional_0_Conditional_3_Template, 5, 5);
|
|
283
278
|
i0.ɵɵelementEnd();
|
|
284
|
-
i0.ɵɵelementStart(4, "
|
|
279
|
+
i0.ɵɵelementStart(4, "mj-dialog-actions")(5, "button", 5);
|
|
285
280
|
i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onDone()); });
|
|
286
281
|
i0.ɵɵtext(6, "Done");
|
|
287
282
|
i0.ɵɵelementEnd();
|
|
288
|
-
i0.ɵɵelementStart(7, "button",
|
|
283
|
+
i0.ɵɵelementStart(7, "button", 6);
|
|
289
284
|
i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
|
|
290
285
|
i0.ɵɵtext(8, "Cancel");
|
|
291
286
|
i0.ɵɵelementEnd()()();
|
|
292
287
|
} if (rf & 2) {
|
|
293
288
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
294
|
-
i0.ɵɵproperty("
|
|
289
|
+
i0.ɵɵproperty("Visible", true)("Title", ctx_r1.dialogTitle)("Width", 500);
|
|
295
290
|
i0.ɵɵadvance(2);
|
|
296
291
|
i0.ɵɵconditional(ctx_r1.loading ? 2 : -1);
|
|
297
292
|
i0.ɵɵadvance();
|
|
@@ -640,15 +635,15 @@ export class ListShareDialogComponent {
|
|
|
640
635
|
return this.config?.isOwner === true;
|
|
641
636
|
}
|
|
642
637
|
static ɵfac = function ListShareDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ListShareDialogComponent)(i0.ɵɵdirectiveInject(i1.ListSharingService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
643
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ListShareDialogComponent, selectors: [["mj-list-share-dialog"]], inputs: { config: "config", visible: "visible" }, outputs: { complete: "complete", cancel: "cancel" }, standalone: false, decls: 1, vars: 1, consts: [[3, "
|
|
644
|
-
i0.ɵɵconditionalCreate(0, ListShareDialogComponent_Conditional_0_Template, 9, 5, "
|
|
638
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ListShareDialogComponent, selectors: [["mj-list-share-dialog"]], inputs: { config: "config", visible: "visible" }, outputs: { complete: "complete", cancel: "cancel" }, standalone: false, decls: 1, vars: 1, consts: [["mjDropdownItem", ""], [3, "Visible", "Title", "Width"], [3, "Close", "Visible", "Title", "Width"], [1, "share-dialog-content"], [1, "loading-container"], ["mjButton", "", "variant", "primary", 3, "click"], ["mjButton", "", 3, "click"], ["text", "Loading shares..."], [1, "add-share-section"], [1, "section-divider"], [1, "current-shares-section"], [1, "empty-state"], [1, "readonly-notice"], [1, "section-title"], [1, "search-type-toggle"], ["mjButton", "", 3, "click", "variant"], [1, "fa-solid", "fa-user"], [1, "fa-solid", "fa-users"], [1, "search-container"], [1, "search-input-wrapper"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", 1, "mj-input", 3, "input", "blur", "value", "placeholder"], [1, "search-results"], [1, "selected-recipient"], [1, "search-result-item"], [1, "search-result-item", 3, "mousedown"], [1, "recipient-info"], [1, "recipient-name"], [1, "recipient-email"], [1, "recipient-chip"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click"], [1, "fa-solid", "fa-times"], ["TextField", "label", "ValueField", "value", 1, "permission-dropdown", 3, "ngModelChange", "Data", "ngModel", "ValuePrimitive"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-plus"], [1, "permission-option"], [1, "permission-label"], [1, "permission-desc"], [1, "share-list"], [1, "share-item"], [1, "share-info"], [1, "share-type-icon"], [1, "share-details"], [1, "share-name"], [1, "share-email"], [1, "share-type-label"], [1, "share-actions"], ["TextField", "label", "ValueField", "value", 1, "permission-dropdown-small", 3, "Data", "ngModel", "ValuePrimitive", "Disabled"], [1, "permission-badge"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Remove access", 3, "disabled"], ["TextField", "label", "ValueField", "value", 1, "permission-dropdown-small", 3, "ValueChange", "Data", "ngModel", "ValuePrimitive", "Disabled"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Remove access", 3, "click", "disabled"], [1, "fa-solid", "fa-trash"], [1, "fa-solid", "fa-share-nodes", "empty-icon"], [1, "empty-hint"], [1, "fa-solid", "fa-info-circle"]], template: function ListShareDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
639
|
+
i0.ɵɵconditionalCreate(0, ListShareDialogComponent_Conditional_0_Template, 9, 5, "mj-dialog", 1);
|
|
645
640
|
} if (rf & 2) {
|
|
646
641
|
i0.ɵɵconditional(ctx.visible ? 0 : -1);
|
|
647
|
-
} }, dependencies: [i2.NgControlStatus, i2.NgModel, i3.
|
|
642
|
+
} }, dependencies: [i2.NgControlStatus, i2.NgModel, i3.MJButtonDirective, i3.MJDialogComponent, i3.MJDialogActionsComponent, i3.MJDropdownComponent, i4.LoadingComponent], styles: [".share-dialog-content[_ngcontent-%COMP%] {\n padding: 0;\n min-height: 200px;\n}\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n}\n\n\n\n.section-title[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.section-divider[_ngcontent-%COMP%] {\n margin: 16px 0;\n border: none;\n border-top: 1px solid var(--mj-border-default);\n}\n\n\n\n.add-share-section[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.search-type-toggle[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-bottom: 12px;\n}\n\n.search-type-toggle[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.search-type-toggle[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n}\n\n\n\n.search-container[_ngcontent-%COMP%] {\n position: relative;\n}\n\n.search-input-wrapper[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-input-wrapper[_ngcontent-%COMP%] .search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 12px;\n color: var(--mj-text-muted);\n pointer-events: none;\n z-index: 1;\n}\n\n.search-input-wrapper[_ngcontent-%COMP%] .mj-input[_ngcontent-%COMP%] {\n padding-left: 36px;\n}\n\n.search-results[_ngcontent-%COMP%] {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n box-shadow: var(--mj-shadow-md);\n max-height: 200px;\n overflow-y: auto;\n z-index: 1000;\n}\n\n.search-result-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.search-result-item[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.search-result-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n width: 20px;\n text-align: center;\n}\n\n.recipient-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.recipient-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.recipient-email[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n\n\n.selected-recipient[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-top: 12px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n}\n\n.recipient-chip[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 20px;\n flex: 1;\n}\n\n.recipient-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.recipient-chip[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n flex: 1;\n font-weight: 500;\n}\n\n.permission-dropdown[_ngcontent-%COMP%] {\n width: 150px;\n}\n\n\n\n.permission-option[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 4px 0;\n}\n\n.permission-label[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.permission-desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n\n\n.current-shares-section[_ngcontent-%COMP%] {\n margin-top: 16px;\n}\n\n.share-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.share-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n transition: background-color 0.15s;\n}\n\n.share-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.share-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.share-type-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 50%;\n}\n\n.share-details[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.share-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.share-email[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.share-type-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-border-default);\n padding: 2px 6px;\n border-radius: 3px;\n display: inline-block;\n width: fit-content;\n}\n\n.share-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.permission-dropdown-small[_ngcontent-%COMP%] {\n width: 110px;\n}\n\n.permission-badge[_ngcontent-%COMP%] {\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n.empty-hint[_ngcontent-%COMP%] {\n font-size: 13px;\n margin-top: 8px !important;\n}\n\n\n\n.readonly-notice[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n margin-top: 16px;\n color: var(--mj-status-warning);\n font-size: 13px;\n}\n\n.readonly-notice[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}"] });
|
|
648
643
|
}
|
|
649
644
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ListShareDialogComponent, [{
|
|
650
645
|
type: Component,
|
|
651
|
-
args: [{ standalone: false, selector: 'mj-list-share-dialog', template: "@if (visible) {\n <kendo-dialog\n [title]=\"dialogTitle\"\n [width]=\"500\"\n [minWidth]=\"400\"\n (close)=\"onCancel()\">\n <div class=\"share-dialog-content\">\n <!-- Loading state -->\n @if (loading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading shares...\"></mj-loading>\n </div>\n }\n @if (!loading) {\n <!-- Add new share section -->\n @if (canModifyShares) {\n <div class=\"add-share-section\">\n <h4 class=\"section-title\">Add people or roles</h4>\n <!-- Search type toggle -->\n <div class=\"search-type-toggle\">\n <button kendoButton\n [fillMode]=\"searchType === 'User' ? 'solid' : 'outline'\"\n [themeColor]=\"searchType === 'User' ? 'primary' : 'base'\"\n (click)=\"setSearchType('User')\">\n <i class=\"fa-solid fa-user\"></i> Users\n </button>\n <button kendoButton\n [fillMode]=\"searchType === 'Role' ? 'solid' : 'outline'\"\n [themeColor]=\"searchType === 'Role' ? 'primary' : 'base'\"\n (click)=\"setSearchType('Role')\">\n <i class=\"fa-solid fa-users\"></i> Roles\n </button>\n </div>\n <!-- Search input -->\n <div class=\"search-container\">\n <kendo-textbox\n [value]=\"searchText\"\n (valueChange)=\"onSearchInput($event)\"\n [placeholder]=\"'Search for ' + (searchType === 'User' ? 'users' : 'roles') + '...'\"\n [clearButton]=\"true\"\n (blur)=\"showSearchResults = false\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search search-icon\"></i>\n </ng-template>\n </kendo-textbox>\n <!-- Search results dropdown -->\n @if (showSearchResults && searchResults.length > 0) {\n <div class=\"search-results\">\n @for (recipient of searchResults; track recipient) {\n <div class=\"search-result-item\"\n (mousedown)=\"selectRecipient(recipient)\">\n <i [class]=\"getShareTypeIcon(recipient.type)\"></i>\n <div class=\"recipient-info\">\n <span class=\"recipient-name\">{{ recipient.name }}</span>\n @if (recipient.email) {\n <span class=\"recipient-email\">{{ recipient.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n <!-- Selected recipient and permission -->\n @if (selectedRecipient) {\n <div class=\"selected-recipient\">\n <div class=\"recipient-chip\">\n <i [class]=\"getShareTypeIcon(selectedRecipient.type)\"></i>\n <span>{{ selectedRecipient.name }}</span>\n <button kendoButton [look]=\"'flat'\" [icon]=\"'close'\" (click)=\"clearSearch()\"></button>\n </div>\n <kendo-dropdownlist\n [data]=\"permissionOptions\"\n [textField]=\"'label'\"\n [valueField]=\"'value'\"\n [(ngModel)]=\"selectedPermission\"\n [valuePrimitive]=\"true\"\n class=\"permission-dropdown\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"permission-option\">\n <span class=\"permission-label\">{{ dataItem.label }}</span>\n <span class=\"permission-desc\">{{ dataItem.description }}</span>\n </div>\n </ng-template>\n </kendo-dropdownlist>\n <button kendoButton\n themeColor=\"primary\"\n [disabled]=\"saving\"\n (click)=\"addShare()\">\n <i class=\"fa-solid fa-plus\"></i> Add\n </button>\n </div>\n }\n </div>\n }\n <!-- Divider -->\n @if (currentShares.length > 0 && canModifyShares) {\n <hr class=\"section-divider\">\n }\n <!-- Current shares section -->\n @if (currentShares.length > 0) {\n <div class=\"current-shares-section\">\n <h4 class=\"section-title\">People with access</h4>\n <div class=\"share-list\">\n @for (share of currentShares; track share) {\n <div class=\"share-item\">\n <div class=\"share-info\">\n <i [class]=\"getShareTypeIcon(share.type)\" class=\"share-type-icon\"></i>\n <div class=\"share-details\">\n <span class=\"share-name\">{{ share.recipientName }}</span>\n @if (share.recipientEmail) {\n <span class=\"share-email\">{{ share.recipientEmail }}</span>\n }\n @if (share.type === 'Role') {\n <span class=\"share-type-label\">Role</span>\n }\n </div>\n </div>\n <div class=\"share-actions\">\n @if (canModifyShares) {\n <kendo-dropdownlist\n [data]=\"permissionOptions\"\n [textField]=\"'label'\"\n [valueField]=\"'value'\"\n [value]=\"share.permissionLevel\"\n [valuePrimitive]=\"true\"\n (valueChange)=\"updateSharePermission(share, $event)\"\n [disabled]=\"saving\"\n class=\"permission-dropdown-small\">\n </kendo-dropdownlist>\n }\n @if (!canModifyShares) {\n <span class=\"permission-badge\">\n {{ getPermissionLabel(share.permissionLevel) }}\n </span>\n }\n @if (canModifyShares) {\n <button kendoButton\n [look]=\"'flat'\"\n [icon]=\"'trash'\"\n title=\"Remove access\"\n [disabled]=\"saving\"\n (click)=\"removeShare(share)\">\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Empty state -->\n @if (currentShares.length === 0 && !loading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-share-nodes empty-icon\"></i>\n <p>This list hasn't been shared with anyone yet.</p>\n @if (canModifyShares) {\n <p class=\"empty-hint\">\n Use the search above to find users or roles to share with.\n </p>\n }\n </div>\n }\n <!-- Read-only notice -->\n @if (!canModifyShares) {\n <div class=\"readonly-notice\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <span>Only the list owner can manage sharing.</span>\n </div>\n }\n }\n </div>\n <kendo-dialog-actions>\n <button kendoButton themeColor=\"primary\" (click)=\"onDone()\">Done</button>\n <button kendoButton (click)=\"onCancel()\">Cancel</button>\n </kendo-dialog-actions>\n </kendo-dialog>\n}\n", styles: [".share-dialog-content {\n padding: 0;\n min-height: 200px;\n}\n\n.loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n}\n\n/* Section styling */\n.section-title {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.section-divider {\n margin: 16px 0;\n border: none;\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* Add share section */\n.add-share-section {\n margin-bottom: 16px;\n}\n\n.search-type-toggle {\n display: flex;\n gap: 8px;\n margin-bottom: 12px;\n}\n\n.search-type-toggle button {\n flex: 1;\n}\n\n.search-type-toggle i {\n margin-right: 6px;\n}\n\n/* Search container */\n.search-container {\n position: relative;\n}\n\n.search-icon {\n color: var(--mj-text-secondary);\n margin-left: 8px;\n}\n\n.search-results {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n box-shadow: var(--mj-shadow-md);\n max-height: 200px;\n overflow-y: auto;\n z-index: 1000;\n}\n\n.search-result-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.search-result-item:hover {\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.search-result-item i {\n color: var(--mj-text-secondary);\n width: 20px;\n text-align: center;\n}\n\n.recipient-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.recipient-name {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.recipient-email {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n/* Selected recipient */\n.selected-recipient {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-top: 12px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n}\n\n.recipient-chip {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 20px;\n flex: 1;\n}\n\n.recipient-chip i {\n color: var(--mj-brand-primary);\n}\n\n.recipient-chip span {\n flex: 1;\n font-weight: 500;\n}\n\n.permission-dropdown {\n width: 150px;\n}\n\n/* Permission option template */\n.permission-option {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 4px 0;\n}\n\n.permission-label {\n font-weight: 500;\n}\n\n.permission-desc {\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n/* Current shares section */\n.current-shares-section {\n margin-top: 16px;\n}\n\n.share-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.share-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n transition: background-color 0.15s;\n}\n\n.share-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.share-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.share-type-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 50%;\n}\n\n.share-details {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.share-name {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.share-email {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.share-type-label {\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-border-default);\n padding: 2px 6px;\n border-radius: 3px;\n display: inline-block;\n width: fit-content;\n}\n\n.share-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.permission-dropdown-small {\n width: 110px;\n}\n\n.permission-badge {\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n}\n\n/* Empty state */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n}\n\n.empty-icon {\n font-size: 48px;\n color: var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.empty-state p {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n.empty-hint {\n font-size: 13px;\n margin-top: 8px !important;\n}\n\n/* Read-only notice */\n.readonly-notice {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n margin-top: 16px;\n color: var(--mj-status-warning);\n font-size: 13px;\n}\n\n.readonly-notice i {\n color: var(--mj-status-warning);\n}\n\n/* Dialog actions - buttons on left */\n:host ::ng-deep kendo-dialog-actions {\n flex-direction: row;\n justify-content: flex-start;\n}\n"] }]
|
|
646
|
+
args: [{ standalone: false, selector: 'mj-list-share-dialog', template: "@if (visible) {\n <mj-dialog\n [Visible]=\"true\"\n [Title]=\"dialogTitle\"\n [Width]=\"500\"\n (Close)=\"onCancel()\">\n <div class=\"share-dialog-content\">\n <!-- Loading state -->\n @if (loading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading shares...\"></mj-loading>\n </div>\n }\n @if (!loading) {\n <!-- Add new share section -->\n @if (canModifyShares) {\n <div class=\"add-share-section\">\n <h4 class=\"section-title\">Add people or roles</h4>\n <!-- Search type toggle -->\n <div class=\"search-type-toggle\">\n <button mjButton\n [variant]=\"searchType === 'User' ? 'primary' : 'outline'\"\n (click)=\"setSearchType('User')\">\n <i class=\"fa-solid fa-user\"></i> Users\n </button>\n <button mjButton\n [variant]=\"searchType === 'Role' ? 'primary' : 'outline'\"\n (click)=\"setSearchType('Role')\">\n <i class=\"fa-solid fa-users\"></i> Roles\n </button>\n </div>\n <!-- Search input -->\n <div class=\"search-container\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"mj-input\"\n [value]=\"searchText\"\n (input)=\"onSearchInput($any($event.target).value)\"\n [placeholder]=\"'Search for ' + (searchType === 'User' ? 'users' : 'roles') + '...'\"\n (blur)=\"showSearchResults = false\" />\n </div>\n <!-- Search results dropdown -->\n @if (showSearchResults && searchResults.length > 0) {\n <div class=\"search-results\">\n @for (recipient of searchResults; track recipient) {\n <div class=\"search-result-item\"\n (mousedown)=\"selectRecipient(recipient)\">\n <i [class]=\"getShareTypeIcon(recipient.type)\"></i>\n <div class=\"recipient-info\">\n <span class=\"recipient-name\">{{ recipient.name }}</span>\n @if (recipient.email) {\n <span class=\"recipient-email\">{{ recipient.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n <!-- Selected recipient and permission -->\n @if (selectedRecipient) {\n <div class=\"selected-recipient\">\n <div class=\"recipient-chip\">\n <i [class]=\"getShareTypeIcon(selectedRecipient.type)\"></i>\n <span>{{ selectedRecipient.name }}</span>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"clearSearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <mj-dropdown\n [Data]=\"permissionOptions\"\n TextField=\"label\"\n ValueField=\"value\"\n [(ngModel)]=\"selectedPermission\"\n [ValuePrimitive]=\"true\"\n class=\"permission-dropdown\">\n <ng-template #mjDropdownItem let-dataItem>\n <div class=\"permission-option\">\n <span class=\"permission-label\">{{ dataItem.label }}</span>\n <span class=\"permission-desc\">{{ dataItem.description }}</span>\n </div>\n </ng-template>\n </mj-dropdown>\n <button mjButton\n variant=\"primary\"\n [disabled]=\"saving\"\n (click)=\"addShare()\">\n <i class=\"fa-solid fa-plus\"></i> Add\n </button>\n </div>\n }\n </div>\n }\n <!-- Divider -->\n @if (currentShares.length > 0 && canModifyShares) {\n <hr class=\"section-divider\">\n }\n <!-- Current shares section -->\n @if (currentShares.length > 0) {\n <div class=\"current-shares-section\">\n <h4 class=\"section-title\">People with access</h4>\n <div class=\"share-list\">\n @for (share of currentShares; track share) {\n <div class=\"share-item\">\n <div class=\"share-info\">\n <i [class]=\"getShareTypeIcon(share.type)\" class=\"share-type-icon\"></i>\n <div class=\"share-details\">\n <span class=\"share-name\">{{ share.recipientName }}</span>\n @if (share.recipientEmail) {\n <span class=\"share-email\">{{ share.recipientEmail }}</span>\n }\n @if (share.type === 'Role') {\n <span class=\"share-type-label\">Role</span>\n }\n </div>\n </div>\n <div class=\"share-actions\">\n @if (canModifyShares) {\n <mj-dropdown\n [Data]=\"permissionOptions\"\n TextField=\"label\"\n ValueField=\"value\"\n [ngModel]=\"share.permissionLevel\"\n [ValuePrimitive]=\"true\"\n (ValueChange)=\"updateSharePermission(share, $any($event))\"\n [Disabled]=\"saving\"\n class=\"permission-dropdown-small\">\n </mj-dropdown>\n }\n @if (!canModifyShares) {\n <span class=\"permission-badge\">\n {{ getPermissionLabel(share.permissionLevel) }}\n </span>\n }\n @if (canModifyShares) {\n <button mjButton\n variant=\"danger\"\n size=\"sm\"\n title=\"Remove access\"\n [disabled]=\"saving\"\n (click)=\"removeShare(share)\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Empty state -->\n @if (currentShares.length === 0 && !loading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-share-nodes empty-icon\"></i>\n <p>This list hasn't been shared with anyone yet.</p>\n @if (canModifyShares) {\n <p class=\"empty-hint\">\n Use the search above to find users or roles to share with.\n </p>\n }\n </div>\n }\n <!-- Read-only notice -->\n @if (!canModifyShares) {\n <div class=\"readonly-notice\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <span>Only the list owner can manage sharing.</span>\n </div>\n }\n }\n </div>\n <mj-dialog-actions>\n <button mjButton variant=\"primary\" (click)=\"onDone()\">Done</button>\n <button mjButton (click)=\"onCancel()\">Cancel</button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n", styles: [".share-dialog-content {\n padding: 0;\n min-height: 200px;\n}\n\n.loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n}\n\n/* Section styling */\n.section-title {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.section-divider {\n margin: 16px 0;\n border: none;\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* Add share section */\n.add-share-section {\n margin-bottom: 16px;\n}\n\n.search-type-toggle {\n display: flex;\n gap: 8px;\n margin-bottom: 12px;\n}\n\n.search-type-toggle button {\n flex: 1;\n}\n\n.search-type-toggle i {\n margin-right: 6px;\n}\n\n/* Search container */\n.search-container {\n position: relative;\n}\n\n.search-input-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-input-wrapper .search-icon {\n position: absolute;\n left: 12px;\n color: var(--mj-text-muted);\n pointer-events: none;\n z-index: 1;\n}\n\n.search-input-wrapper .mj-input {\n padding-left: 36px;\n}\n\n.search-results {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n box-shadow: var(--mj-shadow-md);\n max-height: 200px;\n overflow-y: auto;\n z-index: 1000;\n}\n\n.search-result-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.search-result-item:hover {\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.search-result-item i {\n color: var(--mj-text-secondary);\n width: 20px;\n text-align: center;\n}\n\n.recipient-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.recipient-name {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.recipient-email {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n/* Selected recipient */\n.selected-recipient {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-top: 12px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n}\n\n.recipient-chip {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 20px;\n flex: 1;\n}\n\n.recipient-chip i {\n color: var(--mj-brand-primary);\n}\n\n.recipient-chip span {\n flex: 1;\n font-weight: 500;\n}\n\n.permission-dropdown {\n width: 150px;\n}\n\n/* Permission option template */\n.permission-option {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 4px 0;\n}\n\n.permission-label {\n font-weight: 500;\n}\n\n.permission-desc {\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n/* Current shares section */\n.current-shares-section {\n margin-top: 16px;\n}\n\n.share-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.share-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n transition: background-color 0.15s;\n}\n\n.share-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.share-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.share-type-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 50%;\n}\n\n.share-details {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.share-name {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.share-email {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.share-type-label {\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-border-default);\n padding: 2px 6px;\n border-radius: 3px;\n display: inline-block;\n width: fit-content;\n}\n\n.share-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.permission-dropdown-small {\n width: 110px;\n}\n\n.permission-badge {\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n}\n\n/* Empty state */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n}\n\n.empty-icon {\n font-size: 48px;\n color: var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.empty-state p {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n.empty-hint {\n font-size: 13px;\n margin-top: 8px !important;\n}\n\n/* Read-only notice */\n.readonly-notice {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n margin-top: 16px;\n color: var(--mj-status-warning);\n font-size: 13px;\n}\n\n.readonly-notice i {\n color: var(--mj-status-warning);\n}\n\n"] }]
|
|
652
647
|
}], () => [{ type: i1.ListSharingService }, { type: i0.ChangeDetectorRef }], { config: [{
|
|
653
648
|
type: Input
|
|
654
649
|
}], visible: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-share-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/components/list-share-dialog/list-share-dialog.component.ts","../../../../src/lib/components/list-share-dialog/list-share-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n ChangeDetectorRef\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { Metadata } from '@memberjunction/core';\nimport { ListSharingService } from '../../services/list-sharing.service';\nimport {\n ListShareDialogConfig,\n ListShareDialogResult,\n ListShareInfo,\n ListPermissionLevel,\n ShareRecipient\n} from '../../models/list-sharing.models';\n\n/**\n * Dialog component for managing list sharing.\n * Allows users to share lists with other users or roles with different permission levels.\n *\n * Features:\n * - User/role search with autocomplete\n * - Permission level selection (View, Edit, Owner)\n * - Current shares management\n * - Remove access functionality\n */\n@Component({\n standalone: false,\n selector: 'mj-list-share-dialog',\n templateUrl: './list-share-dialog.component.html',\n styleUrls: ['./list-share-dialog.component.css']\n})\nexport class ListShareDialogComponent implements OnInit, OnDestroy {\n /**\n * Configuration for the dialog\n */\n @Input() config!: ListShareDialogConfig;\n\n /**\n * Controls dialog visibility\n */\n @Input()\n get visible(): boolean {\n return this._visible;\n }\n set visible(value: boolean) {\n if (value && !this._visible) {\n this.initializeDialog();\n }\n this._visible = value;\n }\n private _visible = false;\n\n /**\n * Emitted when dialog is closed with results\n */\n @Output() complete = new EventEmitter<ListShareDialogResult>();\n\n /**\n * Emitted when dialog is cancelled\n */\n @Output() cancel = new EventEmitter<void>();\n\n // State\n loading = false;\n saving = false;\n searchText = '';\n searchType: 'User' | 'Role' = 'User';\n showSearchResults = false;\n\n // Data\n currentShares: ListShareInfo[] = [];\n searchResults: ShareRecipient[] = [];\n selectedRecipient: ShareRecipient | null = null;\n selectedPermission: ListPermissionLevel = 'View';\n\n // Track changes\n sharesAdded: ListShareInfo[] = [];\n sharesUpdated: ListShareInfo[] = [];\n sharesRemoved: string[] = [];\n\n // Permission options\n permissionOptions: { value: ListPermissionLevel; label: string; description: string }[] = [\n { value: 'View', label: 'Viewer', description: 'Can view list contents' },\n { value: 'Edit', label: 'Editor', description: 'Can add/remove items' },\n { value: 'Owner', label: 'Co-owner', description: 'Full control including sharing' }\n ];\n\n // Cleanup\n private destroy$ = new Subject<void>();\n private searchSubject = new Subject<string>();\n\n constructor(\n private sharingService: ListSharingService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.setupSearchDebounce();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Get dialog title\n */\n get dialogTitle(): string {\n return `Share \"${this.config?.listName || 'List'}\"`;\n }\n\n /**\n * Check if there are pending changes\n */\n get hasChanges(): boolean {\n return this.sharesAdded.length > 0 ||\n this.sharesUpdated.length > 0 ||\n this.sharesRemoved.length > 0;\n }\n\n /**\n * Setup search with debounce\n */\n private setupSearchDebounce(): void {\n this.searchSubject.pipe(\n debounceTime(300),\n takeUntil(this.destroy$)\n ).subscribe(async (searchText: string) => {\n if (searchText.trim().length >= 2) {\n await this.performSearch(searchText);\n } else {\n this.searchResults = [];\n this.showSearchResults = false;\n }\n this.cdr.detectChanges();\n });\n }\n\n /**\n * Initialize dialog when opened\n */\n private async initializeDialog(): Promise<void> {\n this.resetState();\n await this.loadCurrentShares();\n }\n\n /**\n * Reset all state\n */\n private resetState(): void {\n this.searchText = '';\n this.searchType = 'User';\n this.showSearchResults = false;\n this.searchResults = [];\n this.selectedRecipient = null;\n this.selectedPermission = 'View';\n this.sharesAdded = [];\n this.sharesUpdated = [];\n this.sharesRemoved = [];\n }\n\n /**\n * Load current shares for the list\n */\n private async loadCurrentShares(): Promise<void> {\n if (!this.config) return;\n\n this.loading = true;\n this.cdr.detectChanges();\n\n try {\n this.currentShares = await this.sharingService.getListShares(this.config.listId);\n } catch (error) {\n console.error('Error loading shares:', error);\n this.currentShares = [];\n } finally {\n this.loading = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Handle search input\n */\n onSearchInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.searchText = value;\n this.searchSubject.next(value);\n }\n\n /**\n * Clear search\n */\n clearSearch(): void {\n this.searchText = '';\n this.searchResults = [];\n this.showSearchResults = false;\n this.selectedRecipient = null;\n }\n\n /**\n * Switch search type\n */\n setSearchType(type: 'User' | 'Role'): void {\n this.searchType = type;\n if (this.searchText.trim().length >= 2) {\n this.searchSubject.next(this.searchText);\n }\n }\n\n /**\n * Perform search\n */\n private async performSearch(searchText: string): Promise<void> {\n try {\n if (this.searchType === 'User') {\n this.searchResults = await this.sharingService.searchUsers(searchText);\n } else {\n this.searchResults = await this.sharingService.searchRoles(searchText);\n }\n\n // Filter out recipients that already have access\n const existingIds = new Set(this.currentShares.map(s => s.recipientId));\n this.searchResults = this.searchResults.filter(r => !existingIds.has(r.id));\n\n // Also filter out the list owner\n this.searchResults = this.searchResults.filter(r => r.id !== this.config?.currentUserId);\n\n this.showSearchResults = this.searchResults.length > 0;\n } catch (error) {\n console.error('Error searching:', error);\n this.searchResults = [];\n }\n }\n\n /**\n * Select a recipient from search results\n */\n selectRecipient(recipient: ShareRecipient): void {\n this.selectedRecipient = recipient;\n this.searchText = recipient.name;\n this.showSearchResults = false;\n this.cdr.detectChanges();\n }\n\n /**\n * Add the selected recipient as a share\n */\n async addShare(): Promise<void> {\n if (!this.selectedRecipient || !this.config) return;\n\n this.saving = true;\n\n try {\n const md = new Metadata();\n let result;\n\n if (this.selectedRecipient.type === 'User') {\n result = await this.sharingService.shareListWithUser(\n this.config.listId,\n this.selectedRecipient.id,\n this.selectedPermission,\n this.config.currentUserId\n );\n } else {\n result = await this.sharingService.shareListWithRole(\n this.config.listId,\n this.selectedRecipient.id,\n this.selectedPermission,\n this.config.currentUserId\n );\n }\n\n if (result.success && result.shareId) {\n // Create a ListShareInfo for tracking\n const newShare: ListShareInfo = {\n shareId: result.shareId,\n listId: this.config.listId,\n type: this.selectedRecipient.type,\n recipientId: this.selectedRecipient.id,\n recipientName: this.selectedRecipient.name,\n recipientEmail: this.selectedRecipient.email,\n permissionLevel: this.selectedPermission,\n status: 'Approved'\n };\n\n this.currentShares.push(newShare);\n this.sharesAdded.push(newShare);\n\n // Clear selection\n this.clearSearch();\n this.selectedPermission = 'View';\n } else {\n console.error('Failed to add share:', result.message);\n }\n } catch (error) {\n console.error('Error adding share:', error);\n } finally {\n this.saving = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Update permission level for an existing share\n */\n async updateSharePermission(share: ListShareInfo, newLevel: ListPermissionLevel): Promise<void> {\n if (share.permissionLevel === newLevel) return;\n\n this.saving = true;\n\n try {\n const result = await this.sharingService.updateSharePermission(share.shareId, newLevel);\n\n if (result.success) {\n share.permissionLevel = newLevel;\n\n // Track the update if not already tracked\n const existingUpdate = this.sharesUpdated.find(s => s.shareId === share.shareId);\n if (!existingUpdate) {\n this.sharesUpdated.push({ ...share });\n }\n } else {\n console.error('Failed to update permission:', result.message);\n }\n } catch (error) {\n console.error('Error updating permission:', error);\n } finally {\n this.saving = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Remove a share\n */\n async removeShare(share: ListShareInfo): Promise<void> {\n this.saving = true;\n\n try {\n const result = await this.sharingService.removeShare(share.shareId);\n\n if (result.success) {\n // Remove from current shares\n this.currentShares = this.currentShares.filter(s => s.shareId !== share.shareId);\n\n // Track the removal\n this.sharesRemoved.push(share.shareId);\n\n // Remove from added if it was just added in this session\n this.sharesAdded = this.sharesAdded.filter(s => s.shareId !== share.shareId);\n } else {\n console.error('Failed to remove share:', result.message);\n }\n } catch (error) {\n console.error('Error removing share:', error);\n } finally {\n this.saving = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Get icon for share type\n */\n getShareTypeIcon(type: 'User' | 'Role'): string {\n return type === 'User' ? 'fa-solid fa-user' : 'fa-solid fa-users';\n }\n\n /**\n * Get permission label\n */\n getPermissionLabel(level: ListPermissionLevel): string {\n const option = this.permissionOptions.find(o => o.value === level);\n return option?.label || level;\n }\n\n /**\n * Close dialog with results\n */\n onDone(): void {\n const result: ListShareDialogResult = {\n action: 'apply',\n sharesAdded: this.sharesAdded,\n sharesUpdated: this.sharesUpdated,\n sharesRemoved: this.sharesRemoved\n };\n\n this._visible = false;\n this.complete.emit(result);\n }\n\n /**\n * Cancel and close dialog\n */\n onCancel(): void {\n this._visible = false;\n this.cancel.emit();\n }\n\n /**\n * Check if current user can modify shares\n */\n get canModifyShares(): boolean {\n return this.config?.isOwner === true;\n }\n}\n","@if (visible) {\n <kendo-dialog\n [title]=\"dialogTitle\"\n [width]=\"500\"\n [minWidth]=\"400\"\n (close)=\"onCancel()\">\n <div class=\"share-dialog-content\">\n <!-- Loading state -->\n @if (loading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading shares...\"></mj-loading>\n </div>\n }\n @if (!loading) {\n <!-- Add new share section -->\n @if (canModifyShares) {\n <div class=\"add-share-section\">\n <h4 class=\"section-title\">Add people or roles</h4>\n <!-- Search type toggle -->\n <div class=\"search-type-toggle\">\n <button kendoButton\n [fillMode]=\"searchType === 'User' ? 'solid' : 'outline'\"\n [themeColor]=\"searchType === 'User' ? 'primary' : 'base'\"\n (click)=\"setSearchType('User')\">\n <i class=\"fa-solid fa-user\"></i> Users\n </button>\n <button kendoButton\n [fillMode]=\"searchType === 'Role' ? 'solid' : 'outline'\"\n [themeColor]=\"searchType === 'Role' ? 'primary' : 'base'\"\n (click)=\"setSearchType('Role')\">\n <i class=\"fa-solid fa-users\"></i> Roles\n </button>\n </div>\n <!-- Search input -->\n <div class=\"search-container\">\n <kendo-textbox\n [value]=\"searchText\"\n (valueChange)=\"onSearchInput($event)\"\n [placeholder]=\"'Search for ' + (searchType === 'User' ? 'users' : 'roles') + '...'\"\n [clearButton]=\"true\"\n (blur)=\"showSearchResults = false\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search search-icon\"></i>\n </ng-template>\n </kendo-textbox>\n <!-- Search results dropdown -->\n @if (showSearchResults && searchResults.length > 0) {\n <div class=\"search-results\">\n @for (recipient of searchResults; track recipient) {\n <div class=\"search-result-item\"\n (mousedown)=\"selectRecipient(recipient)\">\n <i [class]=\"getShareTypeIcon(recipient.type)\"></i>\n <div class=\"recipient-info\">\n <span class=\"recipient-name\">{{ recipient.name }}</span>\n @if (recipient.email) {\n <span class=\"recipient-email\">{{ recipient.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n <!-- Selected recipient and permission -->\n @if (selectedRecipient) {\n <div class=\"selected-recipient\">\n <div class=\"recipient-chip\">\n <i [class]=\"getShareTypeIcon(selectedRecipient.type)\"></i>\n <span>{{ selectedRecipient.name }}</span>\n <button kendoButton [look]=\"'flat'\" [icon]=\"'close'\" (click)=\"clearSearch()\"></button>\n </div>\n <kendo-dropdownlist\n [data]=\"permissionOptions\"\n [textField]=\"'label'\"\n [valueField]=\"'value'\"\n [(ngModel)]=\"selectedPermission\"\n [valuePrimitive]=\"true\"\n class=\"permission-dropdown\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"permission-option\">\n <span class=\"permission-label\">{{ dataItem.label }}</span>\n <span class=\"permission-desc\">{{ dataItem.description }}</span>\n </div>\n </ng-template>\n </kendo-dropdownlist>\n <button kendoButton\n themeColor=\"primary\"\n [disabled]=\"saving\"\n (click)=\"addShare()\">\n <i class=\"fa-solid fa-plus\"></i> Add\n </button>\n </div>\n }\n </div>\n }\n <!-- Divider -->\n @if (currentShares.length > 0 && canModifyShares) {\n <hr class=\"section-divider\">\n }\n <!-- Current shares section -->\n @if (currentShares.length > 0) {\n <div class=\"current-shares-section\">\n <h4 class=\"section-title\">People with access</h4>\n <div class=\"share-list\">\n @for (share of currentShares; track share) {\n <div class=\"share-item\">\n <div class=\"share-info\">\n <i [class]=\"getShareTypeIcon(share.type)\" class=\"share-type-icon\"></i>\n <div class=\"share-details\">\n <span class=\"share-name\">{{ share.recipientName }}</span>\n @if (share.recipientEmail) {\n <span class=\"share-email\">{{ share.recipientEmail }}</span>\n }\n @if (share.type === 'Role') {\n <span class=\"share-type-label\">Role</span>\n }\n </div>\n </div>\n <div class=\"share-actions\">\n @if (canModifyShares) {\n <kendo-dropdownlist\n [data]=\"permissionOptions\"\n [textField]=\"'label'\"\n [valueField]=\"'value'\"\n [value]=\"share.permissionLevel\"\n [valuePrimitive]=\"true\"\n (valueChange)=\"updateSharePermission(share, $event)\"\n [disabled]=\"saving\"\n class=\"permission-dropdown-small\">\n </kendo-dropdownlist>\n }\n @if (!canModifyShares) {\n <span class=\"permission-badge\">\n {{ getPermissionLabel(share.permissionLevel) }}\n </span>\n }\n @if (canModifyShares) {\n <button kendoButton\n [look]=\"'flat'\"\n [icon]=\"'trash'\"\n title=\"Remove access\"\n [disabled]=\"saving\"\n (click)=\"removeShare(share)\">\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Empty state -->\n @if (currentShares.length === 0 && !loading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-share-nodes empty-icon\"></i>\n <p>This list hasn't been shared with anyone yet.</p>\n @if (canModifyShares) {\n <p class=\"empty-hint\">\n Use the search above to find users or roles to share with.\n </p>\n }\n </div>\n }\n <!-- Read-only notice -->\n @if (!canModifyShares) {\n <div class=\"readonly-notice\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <span>Only the list owner can manage sharing.</span>\n </div>\n }\n }\n </div>\n <kendo-dialog-actions>\n <button kendoButton themeColor=\"primary\" (click)=\"onDone()\">Done</button>\n <button kendoButton (click)=\"onCancel()\">Cancel</button>\n </kendo-dialog-actions>\n </kendo-dialog>\n}\n"]}
|
|
1
|
+
{"version":3,"file":"list-share-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/components/list-share-dialog/list-share-dialog.component.ts","../../../../src/lib/components/list-share-dialog/list-share-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n ChangeDetectorRef\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { Metadata } from '@memberjunction/core';\nimport { ListSharingService } from '../../services/list-sharing.service';\nimport {\n ListShareDialogConfig,\n ListShareDialogResult,\n ListShareInfo,\n ListPermissionLevel,\n ShareRecipient\n} from '../../models/list-sharing.models';\n\n/**\n * Dialog component for managing list sharing.\n * Allows users to share lists with other users or roles with different permission levels.\n *\n * Features:\n * - User/role search with autocomplete\n * - Permission level selection (View, Edit, Owner)\n * - Current shares management\n * - Remove access functionality\n */\n@Component({\n standalone: false,\n selector: 'mj-list-share-dialog',\n templateUrl: './list-share-dialog.component.html',\n styleUrls: ['./list-share-dialog.component.css']\n})\nexport class ListShareDialogComponent implements OnInit, OnDestroy {\n /**\n * Configuration for the dialog\n */\n @Input() config!: ListShareDialogConfig;\n\n /**\n * Controls dialog visibility\n */\n @Input()\n get visible(): boolean {\n return this._visible;\n }\n set visible(value: boolean) {\n if (value && !this._visible) {\n this.initializeDialog();\n }\n this._visible = value;\n }\n private _visible = false;\n\n /**\n * Emitted when dialog is closed with results\n */\n @Output() complete = new EventEmitter<ListShareDialogResult>();\n\n /**\n * Emitted when dialog is cancelled\n */\n @Output() cancel = new EventEmitter<void>();\n\n // State\n loading = false;\n saving = false;\n searchText = '';\n searchType: 'User' | 'Role' = 'User';\n showSearchResults = false;\n\n // Data\n currentShares: ListShareInfo[] = [];\n searchResults: ShareRecipient[] = [];\n selectedRecipient: ShareRecipient | null = null;\n selectedPermission: ListPermissionLevel = 'View';\n\n // Track changes\n sharesAdded: ListShareInfo[] = [];\n sharesUpdated: ListShareInfo[] = [];\n sharesRemoved: string[] = [];\n\n // Permission options\n permissionOptions: { value: ListPermissionLevel; label: string; description: string }[] = [\n { value: 'View', label: 'Viewer', description: 'Can view list contents' },\n { value: 'Edit', label: 'Editor', description: 'Can add/remove items' },\n { value: 'Owner', label: 'Co-owner', description: 'Full control including sharing' }\n ];\n\n // Cleanup\n private destroy$ = new Subject<void>();\n private searchSubject = new Subject<string>();\n\n constructor(\n private sharingService: ListSharingService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.setupSearchDebounce();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Get dialog title\n */\n get dialogTitle(): string {\n return `Share \"${this.config?.listName || 'List'}\"`;\n }\n\n /**\n * Check if there are pending changes\n */\n get hasChanges(): boolean {\n return this.sharesAdded.length > 0 ||\n this.sharesUpdated.length > 0 ||\n this.sharesRemoved.length > 0;\n }\n\n /**\n * Setup search with debounce\n */\n private setupSearchDebounce(): void {\n this.searchSubject.pipe(\n debounceTime(300),\n takeUntil(this.destroy$)\n ).subscribe(async (searchText: string) => {\n if (searchText.trim().length >= 2) {\n await this.performSearch(searchText);\n } else {\n this.searchResults = [];\n this.showSearchResults = false;\n }\n this.cdr.detectChanges();\n });\n }\n\n /**\n * Initialize dialog when opened\n */\n private async initializeDialog(): Promise<void> {\n this.resetState();\n await this.loadCurrentShares();\n }\n\n /**\n * Reset all state\n */\n private resetState(): void {\n this.searchText = '';\n this.searchType = 'User';\n this.showSearchResults = false;\n this.searchResults = [];\n this.selectedRecipient = null;\n this.selectedPermission = 'View';\n this.sharesAdded = [];\n this.sharesUpdated = [];\n this.sharesRemoved = [];\n }\n\n /**\n * Load current shares for the list\n */\n private async loadCurrentShares(): Promise<void> {\n if (!this.config) return;\n\n this.loading = true;\n this.cdr.detectChanges();\n\n try {\n this.currentShares = await this.sharingService.getListShares(this.config.listId);\n } catch (error) {\n console.error('Error loading shares:', error);\n this.currentShares = [];\n } finally {\n this.loading = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Handle search input\n */\n onSearchInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.searchText = value;\n this.searchSubject.next(value);\n }\n\n /**\n * Clear search\n */\n clearSearch(): void {\n this.searchText = '';\n this.searchResults = [];\n this.showSearchResults = false;\n this.selectedRecipient = null;\n }\n\n /**\n * Switch search type\n */\n setSearchType(type: 'User' | 'Role'): void {\n this.searchType = type;\n if (this.searchText.trim().length >= 2) {\n this.searchSubject.next(this.searchText);\n }\n }\n\n /**\n * Perform search\n */\n private async performSearch(searchText: string): Promise<void> {\n try {\n if (this.searchType === 'User') {\n this.searchResults = await this.sharingService.searchUsers(searchText);\n } else {\n this.searchResults = await this.sharingService.searchRoles(searchText);\n }\n\n // Filter out recipients that already have access\n const existingIds = new Set(this.currentShares.map(s => s.recipientId));\n this.searchResults = this.searchResults.filter(r => !existingIds.has(r.id));\n\n // Also filter out the list owner\n this.searchResults = this.searchResults.filter(r => r.id !== this.config?.currentUserId);\n\n this.showSearchResults = this.searchResults.length > 0;\n } catch (error) {\n console.error('Error searching:', error);\n this.searchResults = [];\n }\n }\n\n /**\n * Select a recipient from search results\n */\n selectRecipient(recipient: ShareRecipient): void {\n this.selectedRecipient = recipient;\n this.searchText = recipient.name;\n this.showSearchResults = false;\n this.cdr.detectChanges();\n }\n\n /**\n * Add the selected recipient as a share\n */\n async addShare(): Promise<void> {\n if (!this.selectedRecipient || !this.config) return;\n\n this.saving = true;\n\n try {\n const md = new Metadata();\n let result;\n\n if (this.selectedRecipient.type === 'User') {\n result = await this.sharingService.shareListWithUser(\n this.config.listId,\n this.selectedRecipient.id,\n this.selectedPermission,\n this.config.currentUserId\n );\n } else {\n result = await this.sharingService.shareListWithRole(\n this.config.listId,\n this.selectedRecipient.id,\n this.selectedPermission,\n this.config.currentUserId\n );\n }\n\n if (result.success && result.shareId) {\n // Create a ListShareInfo for tracking\n const newShare: ListShareInfo = {\n shareId: result.shareId,\n listId: this.config.listId,\n type: this.selectedRecipient.type,\n recipientId: this.selectedRecipient.id,\n recipientName: this.selectedRecipient.name,\n recipientEmail: this.selectedRecipient.email,\n permissionLevel: this.selectedPermission,\n status: 'Approved'\n };\n\n this.currentShares.push(newShare);\n this.sharesAdded.push(newShare);\n\n // Clear selection\n this.clearSearch();\n this.selectedPermission = 'View';\n } else {\n console.error('Failed to add share:', result.message);\n }\n } catch (error) {\n console.error('Error adding share:', error);\n } finally {\n this.saving = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Update permission level for an existing share\n */\n async updateSharePermission(share: ListShareInfo, newLevel: ListPermissionLevel): Promise<void> {\n if (share.permissionLevel === newLevel) return;\n\n this.saving = true;\n\n try {\n const result = await this.sharingService.updateSharePermission(share.shareId, newLevel);\n\n if (result.success) {\n share.permissionLevel = newLevel;\n\n // Track the update if not already tracked\n const existingUpdate = this.sharesUpdated.find(s => s.shareId === share.shareId);\n if (!existingUpdate) {\n this.sharesUpdated.push({ ...share });\n }\n } else {\n console.error('Failed to update permission:', result.message);\n }\n } catch (error) {\n console.error('Error updating permission:', error);\n } finally {\n this.saving = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Remove a share\n */\n async removeShare(share: ListShareInfo): Promise<void> {\n this.saving = true;\n\n try {\n const result = await this.sharingService.removeShare(share.shareId);\n\n if (result.success) {\n // Remove from current shares\n this.currentShares = this.currentShares.filter(s => s.shareId !== share.shareId);\n\n // Track the removal\n this.sharesRemoved.push(share.shareId);\n\n // Remove from added if it was just added in this session\n this.sharesAdded = this.sharesAdded.filter(s => s.shareId !== share.shareId);\n } else {\n console.error('Failed to remove share:', result.message);\n }\n } catch (error) {\n console.error('Error removing share:', error);\n } finally {\n this.saving = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Get icon for share type\n */\n getShareTypeIcon(type: 'User' | 'Role'): string {\n return type === 'User' ? 'fa-solid fa-user' : 'fa-solid fa-users';\n }\n\n /**\n * Get permission label\n */\n getPermissionLabel(level: ListPermissionLevel): string {\n const option = this.permissionOptions.find(o => o.value === level);\n return option?.label || level;\n }\n\n /**\n * Close dialog with results\n */\n onDone(): void {\n const result: ListShareDialogResult = {\n action: 'apply',\n sharesAdded: this.sharesAdded,\n sharesUpdated: this.sharesUpdated,\n sharesRemoved: this.sharesRemoved\n };\n\n this._visible = false;\n this.complete.emit(result);\n }\n\n /**\n * Cancel and close dialog\n */\n onCancel(): void {\n this._visible = false;\n this.cancel.emit();\n }\n\n /**\n * Check if current user can modify shares\n */\n get canModifyShares(): boolean {\n return this.config?.isOwner === true;\n }\n}\n","@if (visible) {\n <mj-dialog\n [Visible]=\"true\"\n [Title]=\"dialogTitle\"\n [Width]=\"500\"\n (Close)=\"onCancel()\">\n <div class=\"share-dialog-content\">\n <!-- Loading state -->\n @if (loading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading shares...\"></mj-loading>\n </div>\n }\n @if (!loading) {\n <!-- Add new share section -->\n @if (canModifyShares) {\n <div class=\"add-share-section\">\n <h4 class=\"section-title\">Add people or roles</h4>\n <!-- Search type toggle -->\n <div class=\"search-type-toggle\">\n <button mjButton\n [variant]=\"searchType === 'User' ? 'primary' : 'outline'\"\n (click)=\"setSearchType('User')\">\n <i class=\"fa-solid fa-user\"></i> Users\n </button>\n <button mjButton\n [variant]=\"searchType === 'Role' ? 'primary' : 'outline'\"\n (click)=\"setSearchType('Role')\">\n <i class=\"fa-solid fa-users\"></i> Roles\n </button>\n </div>\n <!-- Search input -->\n <div class=\"search-container\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"mj-input\"\n [value]=\"searchText\"\n (input)=\"onSearchInput($any($event.target).value)\"\n [placeholder]=\"'Search for ' + (searchType === 'User' ? 'users' : 'roles') + '...'\"\n (blur)=\"showSearchResults = false\" />\n </div>\n <!-- Search results dropdown -->\n @if (showSearchResults && searchResults.length > 0) {\n <div class=\"search-results\">\n @for (recipient of searchResults; track recipient) {\n <div class=\"search-result-item\"\n (mousedown)=\"selectRecipient(recipient)\">\n <i [class]=\"getShareTypeIcon(recipient.type)\"></i>\n <div class=\"recipient-info\">\n <span class=\"recipient-name\">{{ recipient.name }}</span>\n @if (recipient.email) {\n <span class=\"recipient-email\">{{ recipient.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n <!-- Selected recipient and permission -->\n @if (selectedRecipient) {\n <div class=\"selected-recipient\">\n <div class=\"recipient-chip\">\n <i [class]=\"getShareTypeIcon(selectedRecipient.type)\"></i>\n <span>{{ selectedRecipient.name }}</span>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"clearSearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <mj-dropdown\n [Data]=\"permissionOptions\"\n TextField=\"label\"\n ValueField=\"value\"\n [(ngModel)]=\"selectedPermission\"\n [ValuePrimitive]=\"true\"\n class=\"permission-dropdown\">\n <ng-template #mjDropdownItem let-dataItem>\n <div class=\"permission-option\">\n <span class=\"permission-label\">{{ dataItem.label }}</span>\n <span class=\"permission-desc\">{{ dataItem.description }}</span>\n </div>\n </ng-template>\n </mj-dropdown>\n <button mjButton\n variant=\"primary\"\n [disabled]=\"saving\"\n (click)=\"addShare()\">\n <i class=\"fa-solid fa-plus\"></i> Add\n </button>\n </div>\n }\n </div>\n }\n <!-- Divider -->\n @if (currentShares.length > 0 && canModifyShares) {\n <hr class=\"section-divider\">\n }\n <!-- Current shares section -->\n @if (currentShares.length > 0) {\n <div class=\"current-shares-section\">\n <h4 class=\"section-title\">People with access</h4>\n <div class=\"share-list\">\n @for (share of currentShares; track share) {\n <div class=\"share-item\">\n <div class=\"share-info\">\n <i [class]=\"getShareTypeIcon(share.type)\" class=\"share-type-icon\"></i>\n <div class=\"share-details\">\n <span class=\"share-name\">{{ share.recipientName }}</span>\n @if (share.recipientEmail) {\n <span class=\"share-email\">{{ share.recipientEmail }}</span>\n }\n @if (share.type === 'Role') {\n <span class=\"share-type-label\">Role</span>\n }\n </div>\n </div>\n <div class=\"share-actions\">\n @if (canModifyShares) {\n <mj-dropdown\n [Data]=\"permissionOptions\"\n TextField=\"label\"\n ValueField=\"value\"\n [ngModel]=\"share.permissionLevel\"\n [ValuePrimitive]=\"true\"\n (ValueChange)=\"updateSharePermission(share, $any($event))\"\n [Disabled]=\"saving\"\n class=\"permission-dropdown-small\">\n </mj-dropdown>\n }\n @if (!canModifyShares) {\n <span class=\"permission-badge\">\n {{ getPermissionLabel(share.permissionLevel) }}\n </span>\n }\n @if (canModifyShares) {\n <button mjButton\n variant=\"danger\"\n size=\"sm\"\n title=\"Remove access\"\n [disabled]=\"saving\"\n (click)=\"removeShare(share)\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Empty state -->\n @if (currentShares.length === 0 && !loading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-share-nodes empty-icon\"></i>\n <p>This list hasn't been shared with anyone yet.</p>\n @if (canModifyShares) {\n <p class=\"empty-hint\">\n Use the search above to find users or roles to share with.\n </p>\n }\n </div>\n }\n <!-- Read-only notice -->\n @if (!canModifyShares) {\n <div class=\"readonly-notice\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <span>Only the list owner can manage sharing.</span>\n </div>\n }\n }\n </div>\n <mj-dialog-actions>\n <button mjButton variant=\"primary\" (click)=\"onDone()\">Done</button>\n <button mjButton (click)=\"onCancel()\">Cancel</button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n"]}
|
package/dist/lib/module.d.ts
CHANGED
|
@@ -3,42 +3,15 @@ import * as i1 from "./components/list-management-dialog/list-management-dialog.
|
|
|
3
3
|
import * as i2 from "./components/list-share-dialog/list-share-dialog.component";
|
|
4
4
|
import * as i3 from "@angular/common";
|
|
5
5
|
import * as i4 from "@angular/forms";
|
|
6
|
-
import * as i5 from "@
|
|
7
|
-
import * as i6 from "@
|
|
8
|
-
import * as i7 from "@
|
|
9
|
-
import * as i8 from "@progress/kendo-angular-dropdowns";
|
|
10
|
-
import * as i9 from "@progress/kendo-angular-layout";
|
|
11
|
-
import * as i10 from "@memberjunction/ng-container-directives";
|
|
12
|
-
import * as i11 from "@memberjunction/ng-shared-generic";
|
|
6
|
+
import * as i5 from "@memberjunction/ng-ui-components";
|
|
7
|
+
import * as i6 from "@memberjunction/ng-container-directives";
|
|
8
|
+
import * as i7 from "@memberjunction/ng-shared-generic";
|
|
13
9
|
/**
|
|
14
10
|
* Module providing list management components for MemberJunction.
|
|
15
|
-
*
|
|
16
|
-
* Import this module to use the list management dialog:
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```typescript
|
|
20
|
-
* import { ListManagementModule } from '@memberjunction/ng-list-management';
|
|
21
|
-
*
|
|
22
|
-
* @NgModule({
|
|
23
|
-
* imports: [ListManagementModule]
|
|
24
|
-
* })
|
|
25
|
-
* export class YourModule { }
|
|
26
|
-
* ```
|
|
27
|
-
*
|
|
28
|
-
* Then use in templates:
|
|
29
|
-
*
|
|
30
|
-
* ```html
|
|
31
|
-
* <mj-list-management-dialog
|
|
32
|
-
* [config]="dialogConfig"
|
|
33
|
-
* [visible]="showDialog"
|
|
34
|
-
* (complete)="onComplete($event)"
|
|
35
|
-
* (cancel)="onCancel()">
|
|
36
|
-
* </mj-list-management-dialog>
|
|
37
|
-
* ```
|
|
38
11
|
*/
|
|
39
12
|
export declare class ListManagementModule {
|
|
40
13
|
static ɵfac: i0.ɵɵFactoryDeclaration<ListManagementModule, never>;
|
|
41
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ListManagementModule, [typeof i1.ListManagementDialogComponent, typeof i2.ListShareDialogComponent], [typeof i3.CommonModule, typeof i4.FormsModule, typeof i5.
|
|
14
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ListManagementModule, [typeof i1.ListManagementDialogComponent, typeof i2.ListShareDialogComponent], [typeof i3.CommonModule, typeof i4.FormsModule, typeof i5.MJButtonDirective, typeof i5.MJDialogComponent, typeof i5.MJDialogActionsComponent, typeof i5.MJDropdownComponent, typeof i6.ContainerDirectivesModule, typeof i7.SharedGenericModule], [typeof i1.ListManagementDialogComponent, typeof i2.ListShareDialogComponent]>;
|
|
42
15
|
static ɵinj: i0.ɵɵInjectorDeclaration<ListManagementModule>;
|
|
43
16
|
}
|
|
44
17
|
//# sourceMappingURL=module.d.ts.map
|
package/dist/lib/module.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/lib/module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/lib/module.ts"],"names":[],"mappings":";;;;;;;;AAwBA;;GAEG;AACH,qBAwBa,oBAAoB;yCAApB,oBAAoB;0CAApB,oBAAoB;0CAApB,oBAAoB;CAAI"}
|
package/dist/lib/module.js
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import { NgModule } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { FormsModule } from '@angular/forms';
|
|
4
|
-
//
|
|
5
|
-
import {
|
|
6
|
-
import { ButtonsModule } from '@progress/kendo-angular-buttons';
|
|
7
|
-
import { InputsModule } from '@progress/kendo-angular-inputs';
|
|
8
|
-
import { DropDownsModule } from '@progress/kendo-angular-dropdowns';
|
|
9
|
-
import { LayoutModule } from '@progress/kendo-angular-layout';
|
|
4
|
+
// MJ UI Components
|
|
5
|
+
import { MJButtonDirective, MJDialogComponent, MJDialogActionsComponent, MJDropdownComponent } from '@memberjunction/ng-ui-components';
|
|
10
6
|
// MemberJunction imports
|
|
11
7
|
import { ContainerDirectivesModule } from '@memberjunction/ng-container-directives';
|
|
12
8
|
import { SharedGenericModule } from '@memberjunction/ng-shared-generic';
|
|
@@ -19,29 +15,6 @@ import { ListSharingService } from './services/list-sharing.service';
|
|
|
19
15
|
import * as i0 from "@angular/core";
|
|
20
16
|
/**
|
|
21
17
|
* Module providing list management components for MemberJunction.
|
|
22
|
-
*
|
|
23
|
-
* Import this module to use the list management dialog:
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```typescript
|
|
27
|
-
* import { ListManagementModule } from '@memberjunction/ng-list-management';
|
|
28
|
-
*
|
|
29
|
-
* @NgModule({
|
|
30
|
-
* imports: [ListManagementModule]
|
|
31
|
-
* })
|
|
32
|
-
* export class YourModule { }
|
|
33
|
-
* ```
|
|
34
|
-
*
|
|
35
|
-
* Then use in templates:
|
|
36
|
-
*
|
|
37
|
-
* ```html
|
|
38
|
-
* <mj-list-management-dialog
|
|
39
|
-
* [config]="dialogConfig"
|
|
40
|
-
* [visible]="showDialog"
|
|
41
|
-
* (complete)="onComplete($event)"
|
|
42
|
-
* (cancel)="onCancel()">
|
|
43
|
-
* </mj-list-management-dialog>
|
|
44
|
-
* ```
|
|
45
18
|
*/
|
|
46
19
|
export class ListManagementModule {
|
|
47
20
|
static ɵfac = function ListManagementModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ListManagementModule)(); };
|
|
@@ -51,11 +24,9 @@ export class ListManagementModule {
|
|
|
51
24
|
ListSharingService
|
|
52
25
|
], imports: [CommonModule,
|
|
53
26
|
FormsModule,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
DropDownsModule,
|
|
58
|
-
LayoutModule,
|
|
27
|
+
MJDialogComponent,
|
|
28
|
+
MJDialogActionsComponent,
|
|
29
|
+
MJDropdownComponent,
|
|
59
30
|
ContainerDirectivesModule,
|
|
60
31
|
SharedGenericModule] });
|
|
61
32
|
}
|
|
@@ -69,11 +40,10 @@ export class ListManagementModule {
|
|
|
69
40
|
imports: [
|
|
70
41
|
CommonModule,
|
|
71
42
|
FormsModule,
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
LayoutModule,
|
|
43
|
+
MJButtonDirective,
|
|
44
|
+
MJDialogComponent,
|
|
45
|
+
MJDialogActionsComponent,
|
|
46
|
+
MJDropdownComponent,
|
|
77
47
|
ContainerDirectivesModule,
|
|
78
48
|
SharedGenericModule
|
|
79
49
|
],
|
|
@@ -90,11 +60,10 @@ export class ListManagementModule {
|
|
|
90
60
|
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(ListManagementModule, { declarations: [ListManagementDialogComponent,
|
|
91
61
|
ListShareDialogComponent], imports: [CommonModule,
|
|
92
62
|
FormsModule,
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
LayoutModule,
|
|
63
|
+
MJButtonDirective,
|
|
64
|
+
MJDialogComponent,
|
|
65
|
+
MJDialogActionsComponent,
|
|
66
|
+
MJDropdownComponent,
|
|
98
67
|
ContainerDirectivesModule,
|
|
99
68
|
SharedGenericModule], exports: [ListManagementDialogComponent,
|
|
100
69
|
ListShareDialogComponent] }); })();
|
package/dist/lib/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/lib/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,mBAAmB;AACnB,OAAO,
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/lib/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,mBAAmB;AACnB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,kCAAkC,CAAC;AAE1C,yBAAyB;AACzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,aAAa;AACb,OAAO,EAAE,6BAA6B,EAAE,MAAM,sEAAsE,CAAC;AACrH,OAAO,EAAE,wBAAwB,EAAE,MAAM,4DAA4D,CAAC;AAEtG,WAAW;AACX,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;;AAErE;;GAEG;AAyBH,MAAM,OAAO,oBAAoB;8GAApB,oBAAoB;4DAApB,oBAAoB;iEALpB;YACT,qBAAqB;YACrB,kBAAkB;SACnB,YAhBC,YAAY;YACZ,WAAW;YAEX,iBAAiB;YACjB,wBAAwB;YACxB,mBAAmB;YACnB,yBAAyB;YACzB,mBAAmB;;iFAWV,oBAAoB;cAxBhC,QAAQ;eAAC;gBACR,YAAY,EAAE;oBACZ,6BAA6B;oBAC7B,wBAAwB;iBACzB;gBACD,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,iBAAiB;oBACjB,iBAAiB;oBACjB,wBAAwB;oBACxB,mBAAmB;oBACnB,yBAAyB;oBACzB,mBAAmB;iBACpB;gBACD,OAAO,EAAE;oBACP,6BAA6B;oBAC7B,wBAAwB;iBACzB;gBACD,SAAS,EAAE;oBACT,qBAAqB;oBACrB,kBAAkB;iBACnB;aACF;;wFACY,oBAAoB,mBAtB7B,6BAA6B;QAC7B,wBAAwB,aAGxB,YAAY;QACZ,WAAW;QACX,iBAAiB;QACjB,iBAAiB;QACjB,wBAAwB;QACxB,mBAAmB;QACnB,yBAAyB;QACzB,mBAAmB,aAGnB,6BAA6B;QAC7B,wBAAwB","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n// MJ UI Components\nimport {\n MJButtonDirective,\n MJDialogComponent,\n MJDialogActionsComponent,\n MJDropdownComponent\n} from '@memberjunction/ng-ui-components';\n\n// MemberJunction imports\nimport { ContainerDirectivesModule } from '@memberjunction/ng-container-directives';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\n\n// Components\nimport { ListManagementDialogComponent } from './components/list-management-dialog/list-management-dialog.component';\nimport { ListShareDialogComponent } from './components/list-share-dialog/list-share-dialog.component';\n\n// Services\nimport { ListManagementService } from './services/list-management.service';\nimport { ListSharingService } from './services/list-sharing.service';\n\n/**\n * Module providing list management components for MemberJunction.\n */\n@NgModule({\n declarations: [\n ListManagementDialogComponent,\n ListShareDialogComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n MJButtonDirective,\n MJDialogComponent,\n MJDialogActionsComponent,\n MJDropdownComponent,\n ContainerDirectivesModule,\n SharedGenericModule\n ],\n exports: [\n ListManagementDialogComponent,\n ListShareDialogComponent\n ],\n providers: [\n ListManagementService,\n ListSharingService\n ]\n})\nexport class ListManagementModule { }\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ng-list-management",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.23.0",
|
|
4
4
|
"description": "MemberJunction: Angular Components for managing entity list membership with beautiful, responsive UI",
|
|
5
5
|
"main": "./dist/public-api.js",
|
|
6
6
|
"typings": "./dist/public-api.d.ts",
|
|
@@ -30,20 +30,16 @@
|
|
|
30
30
|
"@angular/core": "21.1.3",
|
|
31
31
|
"@angular/forms": "21.1.3",
|
|
32
32
|
"@angular/router": "21.1.3",
|
|
33
|
-
"@progress/kendo-angular-buttons": "22.0.1",
|
|
34
|
-
"@progress/kendo-angular-dialog": "22.0.1",
|
|
35
|
-
"@progress/kendo-angular-inputs": "22.0.1",
|
|
36
|
-
"@progress/kendo-angular-layout": "22.0.1",
|
|
37
|
-
"@progress/kendo-angular-dropdowns": "22.0.1",
|
|
38
33
|
"rxjs": "^7.8.2"
|
|
39
34
|
},
|
|
40
35
|
"dependencies": {
|
|
41
|
-
"@memberjunction/core": "5.
|
|
42
|
-
"@memberjunction/core-entities": "5.
|
|
43
|
-
"@memberjunction/global": "5.
|
|
44
|
-
"@memberjunction/ng-container-directives": "5.
|
|
45
|
-
"@memberjunction/ng-shared": "5.
|
|
46
|
-
"@memberjunction/ng-shared-generic": "5.
|
|
36
|
+
"@memberjunction/core": "5.23.0",
|
|
37
|
+
"@memberjunction/core-entities": "5.23.0",
|
|
38
|
+
"@memberjunction/global": "5.23.0",
|
|
39
|
+
"@memberjunction/ng-container-directives": "5.23.0",
|
|
40
|
+
"@memberjunction/ng-shared": "5.23.0",
|
|
41
|
+
"@memberjunction/ng-shared-generic": "5.23.0",
|
|
42
|
+
"@memberjunction/ng-ui-components": "5.23.0",
|
|
47
43
|
"tslib": "^2.8.1"
|
|
48
44
|
},
|
|
49
45
|
"sideEffects": false,
|