@masterteam/users-groups 0.0.1 → 0.0.3
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/assets/users-groups.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--spacing:.25rem;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--font-weight-bold:700;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.\!absolute{position:absolute!important}.static{position:static}.col-span-1{grid-column:span 1/span 1}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-4{margin-inline:calc(var(--spacing)*4)}.my-4{margin-block:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-7{margin-top:calc(var(--spacing)*7)}.mb-0{margin-bottom:calc(var(--spacing)*0)}.flex{display:flex}.hidden{display:none}.\!w-\[30rem\]{width:30rem!important}.\!w-\[35rem\]{width:35rem!important}.\!w-\[50rem\]{width:50rem!important}.w-60{width:calc(var(--spacing)*60)}.flex-1{flex:1}.flex-col{flex-direction:column}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.border-t-1{border-top-style:var(--tw-border-style);border-top-width:1px}.border-surface{border-color:var(--p-content-border-color)}.p-4{padding:calc(var(--spacing)*4)}.pt-4{padding-top:calc(var(--spacing)*4)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.\!shadow-none{--tw-shadow:0 0 #0000!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}}@keyframes enter{0%{opacity:var(--p-enter-opacity,1);transform:translate3d(var(--p-enter-translate-x,0),var(--p-enter-translate-y,0),0)scale3d(var(--p-enter-scale,1),var(--p-enter-scale,1),var(--p-enter-scale,1))rotate(var(--p-enter-rotate,0))}}@keyframes leave{to{opacity:var(--p-leave-opacity,1);transform:translate3d(var(--p-leave-translate-x,0),var(--p-leave-translate-y,0),0)scale3d(var(--p-leave-scale,1),var(--p-leave-scale,1),var(--p-leave-scale,1))rotate(var(--p-leave-rotate,0))}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--spacing:.25rem;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--font-weight-bold:700;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.\!absolute{position:absolute!important}.static{position:static}.col-span-1{grid-column:span 1/span 1}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-4{margin-inline:calc(var(--spacing)*4)}.my-4{margin-block:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-7{margin-top:calc(var(--spacing)*7)}.mb-0{margin-bottom:calc(var(--spacing)*0)}.flex{display:flex}.hidden{display:none}.\!w-\[30rem\]{width:30rem!important}.\!w-\[35rem\]{width:35rem!important}.\!w-\[50rem\]{width:50rem!important}.w-60{width:calc(var(--spacing)*60)}.flex-1{flex:1}.flex-col{flex-direction:column}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.border-t-1{border-top-style:var(--tw-border-style);border-top-width:1px}.border-surface{border-color:var(--p-content-border-color)}.p-4{padding:calc(var(--spacing)*4)}.pt-4{padding-top:calc(var(--spacing)*4)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.uppercase{text-transform:uppercase}.\!shadow-none{--tw-shadow:0 0 #0000!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}}@keyframes enter{0%{opacity:var(--p-enter-opacity,1);transform:translate3d(var(--p-enter-translate-x,0),var(--p-enter-translate-y,0),0)scale3d(var(--p-enter-scale,1),var(--p-enter-scale,1),var(--p-enter-scale,1))rotate(var(--p-enter-rotate,0))}}@keyframes leave{to{opacity:var(--p-leave-opacity,1);transform:translate3d(var(--p-leave-translate-x,0),var(--p-leave-translate-y,0),0)scale3d(var(--p-leave-scale,1),var(--p-leave-scale,1),var(--p-leave-scale,1))rotate(var(--p-leave-rotate,0))}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
|
|
@@ -46,11 +46,11 @@ class AddUserToGroup {
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
class UpdateUser {
|
|
49
|
-
|
|
49
|
+
id;
|
|
50
50
|
changes;
|
|
51
51
|
static type = '[UsersGroups] Update User';
|
|
52
|
-
constructor(
|
|
53
|
-
this.
|
|
52
|
+
constructor(id, changes) {
|
|
53
|
+
this.id = id;
|
|
54
54
|
this.changes = changes;
|
|
55
55
|
}
|
|
56
56
|
}
|
|
@@ -130,7 +130,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
130
130
|
let UsersGroupsState = class UsersGroupsState extends CrudStateBase {
|
|
131
131
|
http = inject(HttpClient);
|
|
132
132
|
context = new HttpContext().set(REQUEST_CONTEXT, {
|
|
133
|
-
useBaseUrl:
|
|
133
|
+
useBaseUrl: false,
|
|
134
134
|
});
|
|
135
135
|
// ============================================================================
|
|
136
136
|
// Data Selectors - Individual selectors for fine-grained reactivity
|
|
@@ -184,7 +184,7 @@ let UsersGroupsState = class UsersGroupsState extends CrudStateBase {
|
|
|
184
184
|
});
|
|
185
185
|
}
|
|
186
186
|
createUser(ctx, { payload }) {
|
|
187
|
-
const req$ = this.http.post('Identity/
|
|
187
|
+
const req$ = this.http.post('Identity/users', payload, {
|
|
188
188
|
context: this.context,
|
|
189
189
|
});
|
|
190
190
|
return handleApiRequest({
|
|
@@ -206,7 +206,7 @@ let UsersGroupsState = class UsersGroupsState extends CrudStateBase {
|
|
|
206
206
|
});
|
|
207
207
|
}
|
|
208
208
|
addUserToGroup(ctx, { payload }) {
|
|
209
|
-
const req$ = this.http.post(`identity/groups/${payload.groupId}/members`, { member: payload?.
|
|
209
|
+
const req$ = this.http.post(`identity/groups/${payload.groupId}/members`, { member: payload?.id });
|
|
210
210
|
return handleApiRequest({
|
|
211
211
|
ctx,
|
|
212
212
|
key: UsersGroupsActionKey.AddUserToGroup,
|
|
@@ -223,8 +223,8 @@ let UsersGroupsState = class UsersGroupsState extends CrudStateBase {
|
|
|
223
223
|
},
|
|
224
224
|
});
|
|
225
225
|
}
|
|
226
|
-
updateUser(ctx, { changes,
|
|
227
|
-
const req$ = this.http.put(`Identity/
|
|
226
|
+
updateUser(ctx, { changes, id }) {
|
|
227
|
+
const req$ = this.http.put(`Identity/users/${id}`, changes, {
|
|
228
228
|
context: this.context,
|
|
229
229
|
});
|
|
230
230
|
return handleApiRequest({
|
|
@@ -236,7 +236,7 @@ let UsersGroupsState = class UsersGroupsState extends CrudStateBase {
|
|
|
236
236
|
if (!updatedUser)
|
|
237
237
|
return {};
|
|
238
238
|
return {
|
|
239
|
-
users: this.adapter.upsertOne(state.users, updatedUser, '
|
|
239
|
+
users: this.adapter.upsertOne(state.users, updatedUser, 'id'),
|
|
240
240
|
selectedUser: updatedUser,
|
|
241
241
|
};
|
|
242
242
|
},
|
|
@@ -264,7 +264,7 @@ let UsersGroupsState = class UsersGroupsState extends CrudStateBase {
|
|
|
264
264
|
key: UsersGroupsActionKey.DeleteUserFromGroup,
|
|
265
265
|
request$: req$,
|
|
266
266
|
onSuccess: (_response, state) => {
|
|
267
|
-
const filteredMembers = state.selectedGroup?.members?.filter((e) => e.
|
|
267
|
+
const filteredMembers = state.selectedGroup?.members?.filter((e) => e.userName !== payload.userName) ?? [];
|
|
268
268
|
return {
|
|
269
269
|
selectedGroup: {
|
|
270
270
|
...(state.selectedGroup ?? {}),
|
|
@@ -303,7 +303,7 @@ let UsersGroupsState = class UsersGroupsState extends CrudStateBase {
|
|
|
303
303
|
key: UsersGroupsActionKey.CreateGroup,
|
|
304
304
|
request$: req$,
|
|
305
305
|
onSuccess: (response, state) => {
|
|
306
|
-
const newGroup = response.data
|
|
306
|
+
const newGroup = response.data ?? null;
|
|
307
307
|
if (!newGroup)
|
|
308
308
|
return {};
|
|
309
309
|
return {
|
|
@@ -465,8 +465,8 @@ class UsersGroupsFacade {
|
|
|
465
465
|
createUser(payload) {
|
|
466
466
|
return this.store.dispatch(new CreateUser(payload));
|
|
467
467
|
}
|
|
468
|
-
addUserToGroup(
|
|
469
|
-
return this.store.dispatch(new AddUserToGroup({
|
|
468
|
+
addUserToGroup(id, groupId) {
|
|
469
|
+
return this.store.dispatch(new AddUserToGroup({ id, groupId }));
|
|
470
470
|
}
|
|
471
471
|
deleteUserFromGroup(payload) {
|
|
472
472
|
return this.store.dispatch(new DeleteUserFromGroup(payload));
|
|
@@ -601,7 +601,7 @@ class UserForm {
|
|
|
601
601
|
new UserSearchFieldConfig({
|
|
602
602
|
key: 'userField',
|
|
603
603
|
label: this.translocoService.translate('users-groups.user-name'),
|
|
604
|
-
apiUrl: 'Identity/
|
|
604
|
+
apiUrl: 'Identity/users/external/ad',
|
|
605
605
|
context: this.context,
|
|
606
606
|
validators: [ValidatorConfig.required()],
|
|
607
607
|
order: 1,
|
|
@@ -687,7 +687,7 @@ class UserForm {
|
|
|
687
687
|
mobile: this.externalUserFormControl.value?.mobile,
|
|
688
688
|
image: this.externalUserFormControl.value?.image?.fileName,
|
|
689
689
|
};
|
|
690
|
-
this.facade.updateUser(this.userForEdit()?.
|
|
690
|
+
this.facade.updateUser(this.userForEdit()?.id, payload).subscribe({
|
|
691
691
|
next: () => {
|
|
692
692
|
this.ref.close(true);
|
|
693
693
|
},
|
|
@@ -704,7 +704,7 @@ class UserForm {
|
|
|
704
704
|
}
|
|
705
705
|
else {
|
|
706
706
|
payload = {
|
|
707
|
-
|
|
707
|
+
id: '',
|
|
708
708
|
userName: this.externalUserFormControl.value?.userName,
|
|
709
709
|
displayName: this.externalUserFormControl.value?.displayName,
|
|
710
710
|
email: this.externalUserFormControl.value?.email,
|
|
@@ -739,7 +739,10 @@ class UserForm {
|
|
|
739
739
|
key: 'password',
|
|
740
740
|
label: this.translocoService.translate('users-groups.password'),
|
|
741
741
|
placeholder: this.translocoService.translate('users-groups.password'),
|
|
742
|
-
validators: [
|
|
742
|
+
validators: [
|
|
743
|
+
ValidatorConfig.required(),
|
|
744
|
+
ValidatorConfig.pattern('^(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).+$', "Passwords must have at least one non alphanumeric character.\nPasswords must have at least one uppercase ('A'-'Z')."),
|
|
745
|
+
],
|
|
743
746
|
inputType: 'password',
|
|
744
747
|
colSpan: 6,
|
|
745
748
|
order: 6,
|
|
@@ -748,7 +751,10 @@ class UserForm {
|
|
|
748
751
|
key: 'confirmPassword',
|
|
749
752
|
label: this.translocoService.translate('users-groups.confirm-password'),
|
|
750
753
|
placeholder: this.translocoService.translate('users-groups.confirm-password'),
|
|
751
|
-
validators: [
|
|
754
|
+
validators: [
|
|
755
|
+
ValidatorConfig.required(),
|
|
756
|
+
ValidatorConfig.pattern('^(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).+$', "Passwords must have at least one non alphanumeric character.\nPasswords must have at least one uppercase ('A'-'Z')."),
|
|
757
|
+
],
|
|
752
758
|
inputType: 'password',
|
|
753
759
|
colSpan: 6,
|
|
754
760
|
order: 6,
|
|
@@ -954,7 +960,7 @@ class GroupForm {
|
|
|
954
960
|
userCol = viewChild.required('userCol');
|
|
955
961
|
isUserExistInMembers = signal(false, ...(ngDevMode ? [{ debugName: "isUserExistInMembers" }] : []));
|
|
956
962
|
context = new HttpContext().set(REQUEST_CONTEXT, {
|
|
957
|
-
useBaseUrl:
|
|
963
|
+
useBaseUrl: false,
|
|
958
964
|
});
|
|
959
965
|
groupFormConfig = signal({
|
|
960
966
|
sections: [
|
|
@@ -1022,14 +1028,14 @@ class GroupForm {
|
|
|
1022
1028
|
color: 'danger',
|
|
1023
1029
|
variant: 'outlined',
|
|
1024
1030
|
action: (row) => {
|
|
1025
|
-
this.deletingRowIds.update((ids) => [...ids, row?.
|
|
1031
|
+
this.deletingRowIds.update((ids) => [...ids, row?.userName]);
|
|
1026
1032
|
this.facade
|
|
1027
1033
|
.deleteUserFromGroup({
|
|
1028
|
-
userName: row?.
|
|
1034
|
+
userName: row?.userName,
|
|
1029
1035
|
groupId: this.groupForEdit()?.id,
|
|
1030
1036
|
})
|
|
1031
1037
|
.pipe(finalize(() => {
|
|
1032
|
-
this.deletingRowIds.update((ids) => ids.filter((id) => id !== row?.
|
|
1038
|
+
this.deletingRowIds.update((ids) => ids.filter((id) => id !== row?.userName));
|
|
1033
1039
|
}))
|
|
1034
1040
|
.subscribe();
|
|
1035
1041
|
},
|
|
@@ -1037,7 +1043,7 @@ class GroupForm {
|
|
|
1037
1043
|
type: 'popup',
|
|
1038
1044
|
confirmationType: 'delete',
|
|
1039
1045
|
},
|
|
1040
|
-
loading: (row) => this.deletingRowIds().includes(row?.
|
|
1046
|
+
loading: (row) => this.deletingRowIds().includes(row?.userName),
|
|
1041
1047
|
},
|
|
1042
1048
|
], ...(ngDevMode ? [{ debugName: "rowActions" }] : []));
|
|
1043
1049
|
constructor() {
|
|
@@ -1057,7 +1063,7 @@ class GroupForm {
|
|
|
1057
1063
|
});
|
|
1058
1064
|
}
|
|
1059
1065
|
this.internalUserFormControl.valueChanges.subscribe((value) => {
|
|
1060
|
-
const isUserExistInMembers = this.selectedGroup()?.members?.find((member) => member?.user?.
|
|
1066
|
+
const isUserExistInMembers = this.selectedGroup()?.members?.find((member) => member?.user?.id === value?.userField?.id);
|
|
1061
1067
|
this.isUserExistInMembers.set(isUserExistInMembers);
|
|
1062
1068
|
});
|
|
1063
1069
|
}
|
|
@@ -1090,7 +1096,7 @@ class GroupForm {
|
|
|
1090
1096
|
}
|
|
1091
1097
|
}
|
|
1092
1098
|
onAddUser() {
|
|
1093
|
-
if (this.internalUserFormControl.value.userField.
|
|
1099
|
+
if (this.internalUserFormControl.value.userField.id &&
|
|
1094
1100
|
!this.isUserExistInMembers()) {
|
|
1095
1101
|
this.facade
|
|
1096
1102
|
.addUserToGroup(this.internalUserFormControl.value.userField.userName, this.groupForEdit()?.id)
|
|
@@ -1100,7 +1106,7 @@ class GroupForm {
|
|
|
1100
1106
|
}
|
|
1101
1107
|
}
|
|
1102
1108
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: GroupForm, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1103
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: GroupForm, isStandalone: true, selector: "mt-group-form", inputs: { groupForEdit: { classPropertyName: "groupForEdit", publicName: "groupForEdit", isSignal: true, isRequired: false, transformFunction: null } }, providers: [DialogService], viewQueries: [{ propertyName: "userCol", first: true, predicate: ["userCol"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div [class]=\"'flex flex-col gap-1 p-4 ' + modal.contentClass\">\r\n @if (!getGroupFormLoading()) {\r\n <form class=\"col-span-1\">\r\n <mt-dynamic-form\r\n [formConfig]=\"groupFormConfig()\"\r\n [formControl]=\"groupFormControl\"\r\n />\r\n </form>\r\n\r\n @if (groupForEdit()) {\r\n <div class=\"flex gap-3 items-end mt-6 pt-4 border-t-1 border-surface\">\r\n <mt-dynamic-form\r\n class=\"flex-1\"\r\n [formConfig]=\"internalUserFormConfig()\"\r\n [formControl]=\"internalUserFormControl\"\r\n />\r\n <mt-button\r\n icon=\"general.plus\"\r\n class=\"mb-0\"\r\n variant=\"outlined\"\r\n (click)=\"onAddUser()\"\r\n [disabled]=\"\r\n addUserToGroupLoading() ||\r\n isUserExistInMembers() ||\r\n !internalUserFormControl.value?.userField\r\n \"\r\n />\r\n </div>\r\n\r\n <mt-table\r\n [data]=\"selectedGroup()?.members || []\"\r\n [columns]=\"tableColumns()\"\r\n [rowActions]=\"rowActions()\"\r\n [generalSearch]=\"false\"\r\n [showFilters]=\"false\"\r\n [loading]=\"addUserToGroupLoading()\"\r\n >\r\n </mt-table>\r\n <ng-template #userCol let-row>\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar [icon]=\"'custom.user-pp'\"> </mt-avatar>\r\n {{ row?.
|
|
1109
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: GroupForm, isStandalone: true, selector: "mt-group-form", inputs: { groupForEdit: { classPropertyName: "groupForEdit", publicName: "groupForEdit", isSignal: true, isRequired: false, transformFunction: null } }, providers: [DialogService], viewQueries: [{ propertyName: "userCol", first: true, predicate: ["userCol"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div [class]=\"'flex flex-col gap-1 p-4 ' + modal.contentClass\">\r\n @if (!getGroupFormLoading()) {\r\n <form class=\"col-span-1\">\r\n <mt-dynamic-form\r\n [formConfig]=\"groupFormConfig()\"\r\n [formControl]=\"groupFormControl\"\r\n />\r\n </form>\r\n\r\n @if (groupForEdit()) {\r\n <div class=\"flex gap-3 items-end mt-6 pt-4 border-t-1 border-surface\">\r\n <mt-dynamic-form\r\n class=\"flex-1\"\r\n [formConfig]=\"internalUserFormConfig()\"\r\n [formControl]=\"internalUserFormControl\"\r\n />\r\n <mt-button\r\n icon=\"general.plus\"\r\n class=\"mb-0\"\r\n variant=\"outlined\"\r\n (click)=\"onAddUser()\"\r\n [disabled]=\"\r\n addUserToGroupLoading() ||\r\n isUserExistInMembers() ||\r\n !internalUserFormControl.value?.userField\r\n \"\r\n />\r\n </div>\r\n\r\n <mt-table\r\n [data]=\"selectedGroup()?.members || []\"\r\n [columns]=\"tableColumns()\"\r\n [rowActions]=\"rowActions()\"\r\n [generalSearch]=\"false\"\r\n [showFilters]=\"false\"\r\n [loading]=\"addUserToGroupLoading()\"\r\n >\r\n </mt-table>\r\n <ng-template #userCol let-row>\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar [icon]=\"'custom.user-pp'\"> </mt-avatar>\r\n {{ row?.displayName }}\r\n </div>\r\n </ng-template>\r\n }\r\n } @else {\r\n <p-skeleton class=\"my-4 mt-7\" height=\"3rem\" />\r\n <p-skeleton class=\"my-4\" height=\"3rem\" />\r\n <p-skeleton class=\"my-4\" height=\"3rem\" />\r\n }\r\n </div>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"selectedGroup() ? ('save' | transloco) : ('add' | transloco)\"\r\n (click)=\"onSubmit()\"\r\n [loading]=\"createUpdateGroupLoading()\"\r\n [disabled]=\"!this.groupFormControl.valid\"\r\n />\r\n </div>\r\n</ng-container>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i1.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }, { kind: "component", type: Table, selector: "mt-table", inputs: ["filters", "data", "columns", "rowActions", "size", "showGridlines", "stripedRows", "selectableRows", "generalSearch", "showFilters", "loading", "updating", "lazy", "lazyTotalRecords", "reorderableColumns", "reorderableRows", "dataKey", "exportable", "exportFilename", "tabs", "tabsOptionLabel", "tabsOptionValue", "activeTab", "actions", "paginatorPosition", "pageSize", "currentPage", "first", "filterTerm"], outputs: ["selectionChange", "cellChange", "lazyLoad", "columnReorder", "rowReorder", "filtersChange", "activeTabChange", "onTabChange", "pageSizeChange", "currentPageChange", "firstChange", "filterTermChange"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
1104
1110
|
}
|
|
1105
1111
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: GroupForm, decorators: [{
|
|
1106
1112
|
type: Component,
|
|
@@ -1114,7 +1120,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImpor
|
|
|
1114
1120
|
TranslocoPipe,
|
|
1115
1121
|
Avatar,
|
|
1116
1122
|
Table,
|
|
1117
|
-
], providers: [DialogService], template: "<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div [class]=\"'flex flex-col gap-1 p-4 ' + modal.contentClass\">\r\n @if (!getGroupFormLoading()) {\r\n <form class=\"col-span-1\">\r\n <mt-dynamic-form\r\n [formConfig]=\"groupFormConfig()\"\r\n [formControl]=\"groupFormControl\"\r\n />\r\n </form>\r\n\r\n @if (groupForEdit()) {\r\n <div class=\"flex gap-3 items-end mt-6 pt-4 border-t-1 border-surface\">\r\n <mt-dynamic-form\r\n class=\"flex-1\"\r\n [formConfig]=\"internalUserFormConfig()\"\r\n [formControl]=\"internalUserFormControl\"\r\n />\r\n <mt-button\r\n icon=\"general.plus\"\r\n class=\"mb-0\"\r\n variant=\"outlined\"\r\n (click)=\"onAddUser()\"\r\n [disabled]=\"\r\n addUserToGroupLoading() ||\r\n isUserExistInMembers() ||\r\n !internalUserFormControl.value?.userField\r\n \"\r\n />\r\n </div>\r\n\r\n <mt-table\r\n [data]=\"selectedGroup()?.members || []\"\r\n [columns]=\"tableColumns()\"\r\n [rowActions]=\"rowActions()\"\r\n [generalSearch]=\"false\"\r\n [showFilters]=\"false\"\r\n [loading]=\"addUserToGroupLoading()\"\r\n >\r\n </mt-table>\r\n <ng-template #userCol let-row>\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar [icon]=\"'custom.user-pp'\"> </mt-avatar>\r\n {{ row?.
|
|
1123
|
+
], providers: [DialogService], template: "<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div [class]=\"'flex flex-col gap-1 p-4 ' + modal.contentClass\">\r\n @if (!getGroupFormLoading()) {\r\n <form class=\"col-span-1\">\r\n <mt-dynamic-form\r\n [formConfig]=\"groupFormConfig()\"\r\n [formControl]=\"groupFormControl\"\r\n />\r\n </form>\r\n\r\n @if (groupForEdit()) {\r\n <div class=\"flex gap-3 items-end mt-6 pt-4 border-t-1 border-surface\">\r\n <mt-dynamic-form\r\n class=\"flex-1\"\r\n [formConfig]=\"internalUserFormConfig()\"\r\n [formControl]=\"internalUserFormControl\"\r\n />\r\n <mt-button\r\n icon=\"general.plus\"\r\n class=\"mb-0\"\r\n variant=\"outlined\"\r\n (click)=\"onAddUser()\"\r\n [disabled]=\"\r\n addUserToGroupLoading() ||\r\n isUserExistInMembers() ||\r\n !internalUserFormControl.value?.userField\r\n \"\r\n />\r\n </div>\r\n\r\n <mt-table\r\n [data]=\"selectedGroup()?.members || []\"\r\n [columns]=\"tableColumns()\"\r\n [rowActions]=\"rowActions()\"\r\n [generalSearch]=\"false\"\r\n [showFilters]=\"false\"\r\n [loading]=\"addUserToGroupLoading()\"\r\n >\r\n </mt-table>\r\n <ng-template #userCol let-row>\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar [icon]=\"'custom.user-pp'\"> </mt-avatar>\r\n {{ row?.displayName }}\r\n </div>\r\n </ng-template>\r\n }\r\n } @else {\r\n <p-skeleton class=\"my-4 mt-7\" height=\"3rem\" />\r\n <p-skeleton class=\"my-4\" height=\"3rem\" />\r\n <p-skeleton class=\"my-4\" height=\"3rem\" />\r\n }\r\n </div>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"selectedGroup() ? ('save' | transloco) : ('add' | transloco)\"\r\n (click)=\"onSubmit()\"\r\n [loading]=\"createUpdateGroupLoading()\"\r\n [disabled]=\"!this.groupFormControl.valid\"\r\n />\r\n </div>\r\n</ng-container>\r\n" }]
|
|
1118
1124
|
}], ctorParameters: () => [], propDecorators: { groupForEdit: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupForEdit", required: false }] }], userCol: [{ type: i0.ViewChild, args: ['userCol', { isSignal: true }] }] } });
|
|
1119
1125
|
|
|
1120
1126
|
class Groups {
|
|
@@ -1204,11 +1210,11 @@ class Groups {
|
|
|
1204
1210
|
});
|
|
1205
1211
|
}
|
|
1206
1212
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: Groups, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1207
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.0.3", type: Groups, isStandalone: true, selector: "mt-groups", viewQueries: [{ propertyName: "workspaceCol", first: true, predicate: ["workspaceCol"], descendants: true, isSignal: true }, { propertyName: "groupCol", first: true, predicate: ["groupCol"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div class=\"mt-5\">\r\n <ng-template #workspaceCol let-row>\r\n <div>{{ row.workspace }}</div>\r\n </ng-template>\r\n <ng-template #groupCol let-row>\r\n <div class=\"flex items-center gap-2\"
|
|
1213
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.0.3", type: Groups, isStandalone: true, selector: "mt-groups", viewQueries: [{ propertyName: "workspaceCol", first: true, predicate: ["workspaceCol"], descendants: true, isSignal: true }, { propertyName: "groupCol", first: true, predicate: ["groupCol"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div class=\"mt-5\">\r\n <ng-template #workspaceCol let-row>\r\n <div>{{ row.workspace }}</div>\r\n </ng-template>\r\n <ng-template #groupCol let-row>\r\n <div class=\"flex items-center gap-2\">\r\n {{\r\n row.name?.display\r\n }}\r\n </div>\r\n </ng-template>\r\n\r\n <mt-table [(activeTab)]=\"activeTab\" [data]=\"allGroups()\" [columns]=\"tableColumns()\" [actions]=\"tableActions()\"\r\n [rowActions]=\"rowActions()\" [generalSearch]=\"true\" [showFilters]=\"true\" [loading]=\"loading()\">\r\n </mt-table>\r\n </div>\r\n</ng-container>\r\n", styles: [".groups{padding:2rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: Table, selector: "mt-table", inputs: ["filters", "data", "columns", "rowActions", "size", "showGridlines", "stripedRows", "selectableRows", "generalSearch", "showFilters", "loading", "updating", "lazy", "lazyTotalRecords", "reorderableColumns", "reorderableRows", "dataKey", "exportable", "exportFilename", "tabs", "tabsOptionLabel", "tabsOptionValue", "activeTab", "actions", "paginatorPosition", "pageSize", "currentPage", "first", "filterTerm"], outputs: ["selectionChange", "cellChange", "lazyLoad", "columnReorder", "rowReorder", "filtersChange", "activeTabChange", "onTabChange", "pageSizeChange", "currentPageChange", "firstChange", "filterTermChange"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] });
|
|
1208
1214
|
}
|
|
1209
1215
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: Groups, decorators: [{
|
|
1210
1216
|
type: Component,
|
|
1211
|
-
args: [{ selector: 'mt-groups', standalone: true, imports: [CommonModule, SkeletonModule, Table, TranslocoDirective], template: "<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div class=\"mt-5\">\r\n <ng-template #workspaceCol let-row>\r\n <div>{{ row.workspace }}</div>\r\n </ng-template>\r\n <ng-template #groupCol let-row>\r\n <div class=\"flex items-center gap-2\"
|
|
1217
|
+
args: [{ selector: 'mt-groups', standalone: true, imports: [CommonModule, SkeletonModule, Table, TranslocoDirective], template: "<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div class=\"mt-5\">\r\n <ng-template #workspaceCol let-row>\r\n <div>{{ row.workspace }}</div>\r\n </ng-template>\r\n <ng-template #groupCol let-row>\r\n <div class=\"flex items-center gap-2\">\r\n {{\r\n row.name?.display\r\n }}\r\n </div>\r\n </ng-template>\r\n\r\n <mt-table [(activeTab)]=\"activeTab\" [data]=\"allGroups()\" [columns]=\"tableColumns()\" [actions]=\"tableActions()\"\r\n [rowActions]=\"rowActions()\" [generalSearch]=\"true\" [showFilters]=\"true\" [loading]=\"loading()\">\r\n </mt-table>\r\n </div>\r\n</ng-container>\r\n", styles: [".groups{padding:2rem}\n"] }]
|
|
1212
1218
|
}], propDecorators: { workspaceCol: [{ type: i0.ViewChild, args: ['workspaceCol', { isSignal: true }] }], groupCol: [{ type: i0.ViewChild, args: ['groupCol', { isSignal: true }] }] } });
|
|
1213
1219
|
|
|
1214
1220
|
// store/index.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masterteam-users-groups.mjs","sources":["../../../../packages/masterteam/users-groups/src/store/users-groups/users-groups.actions.ts","../../../../packages/masterteam/users-groups/src/store/users-groups/users-groups.model.ts","../../../../packages/masterteam/users-groups/src/store/users-groups/users-groups.state.ts","../../../../packages/masterteam/users-groups/src/store/users-groups/users-groups.facade.ts","../../../../packages/masterteam/users-groups/src/lib/users-groups/users-groups.ts","../../../../packages/masterteam/users-groups/src/lib/users-groups/users-groups.html","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/users/user-form/user-form.ts","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/users/user-form/user-form.html","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/users/users.ts","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/users/users.html","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/groups/group-form/group-form.ts","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/groups/group-form/group-form.html","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/groups/groups.ts","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/groups/groups.html","../../../../packages/masterteam/users-groups/src/store/index.ts","../../../../packages/masterteam/users-groups/src/masterteam-users-groups.ts"],"sourcesContent":["import { User, Group } from './users-groups.model';\r\n\r\nexport class GetUsers {\r\n static readonly type = '[UsersGroups] Get Users';\r\n}\r\n\r\nexport class GetUser {\r\n static readonly type = '[UsersGroups] Get One';\r\n constructor(public userName: string | null) {}\r\n}\r\n\r\nexport class CreateUser {\r\n static readonly type = '[UsersGroups] Create User';\r\n constructor(public payload: Partial<User>) {}\r\n}\r\nexport class AddUserToGroup {\r\n static readonly type = '[UsersGroups] Add User To Group';\r\n constructor(\r\n public payload: {\r\n groupId: string;\r\n userId: string;\r\n },\r\n ) {}\r\n}\r\n\r\nexport class UpdateUser {\r\n static readonly type = '[UsersGroups] Update User';\r\n constructor(\r\n public userId: string | undefined,\r\n public changes: Partial<User>,\r\n ) {}\r\n}\r\n\r\nexport class DeleteUser {\r\n static readonly type = '[UsersGroups] Delete User';\r\n constructor(public userName: string | number) {}\r\n}\r\nexport class DeleteUserFromGroup {\r\n static readonly type = '[UsersGroups] Delete User From Group';\r\n constructor(public payload: any) {}\r\n}\r\n\r\nexport class GetGroups {\r\n static readonly type = '[UsersGroups] Get Groups';\r\n}\r\nexport class ClearSelectedGroup {\r\n static readonly type = '[UsersGroups] Clear Selected Group';\r\n}\r\nexport class GetGroup {\r\n static readonly type = '[UsersGroups] Get One Group';\r\n constructor(public groupId: string | number | null) {}\r\n}\r\n\r\nexport class CreateGroup {\r\n static readonly type = '[UsersGroups] Create Group';\r\n constructor(public payload: Partial<Group>) {}\r\n}\r\n\r\nexport class UpdateGroup {\r\n static readonly type = '[UsersGroups] Update Group';\r\n constructor(\r\n public groupId: string | number | undefined,\r\n public changes: Partial<Group>,\r\n ) {}\r\n}\r\n\r\nexport class DeleteGroup {\r\n static readonly type = '[UsersGroups] Delete Group';\r\n constructor(public groupId: string | number) {}\r\n}\r\n","import { LoadingStateShape } from '../utils/state-helpers';\r\n\r\nexport interface User {\r\n displayName: string;\r\n userId: string;\r\n userName: string;\r\n photo?: any;\r\n password?: string;\r\n image?: string;\r\n department?: string | null;\r\n stars?: number;\r\n mobile?: string;\r\n ext?: number;\r\n isExternal?: boolean;\r\n email?: string;\r\n}\r\n\r\nexport interface Group {\r\n id?: string | number;\r\n name?: any;\r\n createdAt?: any;\r\n workspace?: any;\r\n description?: string;\r\n members?: any[];\r\n membersCount?: number;\r\n}\r\n\r\nexport enum UsersGroupsActionKey {\r\n GetUsers = 'getUsers',\r\n GetUser = 'getUser',\r\n CreateUser = 'createUser',\r\n UpdateUser = 'updateUser',\r\n DeleteUser = 'deleteUser',\r\n AddUserToGroup = 'addUserToGroup',\r\n DeleteUserFromGroup = 'deleteUserFromGroup',\r\n GetGroups = 'getGroups',\r\n GetGroup = 'getGroup',\r\n CreateGroup = 'createGroup',\r\n UpdateGroup = 'updateGroup',\r\n DeleteGroup = 'deleteGroup',\r\n}\r\n\r\nexport interface UsersGroupsStateModel extends LoadingStateShape<UsersGroupsActionKey> {\r\n users: User[];\r\n selectedUser: User | null;\r\n groups: Group[];\r\n selectedGroup: Group | null;\r\n}\r\n","import { REQUEST_CONTEXT } from '@masterteam/components';\r\nimport { State, Action, StateContext, Selector } from '@ngxs/store';\r\nimport {\r\n CreateUser,\r\n DeleteUser,\r\n GetUser,\r\n GetUsers,\r\n UpdateUser,\r\n ClearSelectedGroup,\r\n CreateGroup,\r\n DeleteGroup,\r\n GetGroup,\r\n GetGroups,\r\n UpdateGroup,\r\n AddUserToGroup,\r\n DeleteUserFromGroup,\r\n} from './users-groups.actions';\r\nimport {\r\n User,\r\n Group,\r\n UsersGroupsActionKey,\r\n UsersGroupsStateModel,\r\n} from './users-groups.model';\r\nimport { HttpClient, HttpContext } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Response } from './api.model';\r\nimport { CrudStateBase, handleApiRequest } from '@masterteam/components';\r\n\r\n@State<UsersGroupsStateModel>({\r\n name: 'usersGroups',\r\n defaults: {\r\n users: [],\r\n selectedUser: null,\r\n groups: [],\r\n selectedGroup: null,\r\n loadingActive: [],\r\n errors: {},\r\n },\r\n})\r\n@Injectable()\r\nexport class UsersGroupsState extends CrudStateBase<\r\n any,\r\n UsersGroupsStateModel,\r\n UsersGroupsActionKey\r\n> {\r\n private http = inject(HttpClient);\r\n context = new HttpContext().set(REQUEST_CONTEXT, {\r\n useBaseUrl: true,\r\n });\r\n\r\n // ============================================================================\r\n // Data Selectors - Individual selectors for fine-grained reactivity\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getUsers(state: UsersGroupsStateModel): User[] {\r\n return state.users;\r\n }\r\n\r\n @Selector()\r\n static getSelectedUser(state: UsersGroupsStateModel): User | null {\r\n return state.selectedUser;\r\n }\r\n\r\n @Selector()\r\n static getGroups(state: UsersGroupsStateModel): Group[] {\r\n return state.groups;\r\n }\r\n\r\n @Selector()\r\n static getSelectedGroup(state: UsersGroupsStateModel): Group | null {\r\n return state.selectedGroup;\r\n }\r\n\r\n // ============================================================================\r\n // Loading/Error Slice Selectors - REQUIRED for optimal performance\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getLoadingActive(state: UsersGroupsStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(\r\n state: UsersGroupsStateModel,\r\n ): Record<string, string | null> {\r\n return state.errors;\r\n }\r\n\r\n // ============================================================================\r\n // CRUD Actions\r\n // ============================================================================\r\n @Action(GetUsers)\r\n getUsers(ctx: StateContext<UsersGroupsStateModel>) {\r\n const req$ = this.http.get<Response<User[]>>('Identity/users', {\r\n context: this.context,\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.GetUsers,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n users: response.data ?? [],\r\n }),\r\n });\r\n }\r\n @Action(GetUser)\r\n getUser(ctx: StateContext<UsersGroupsStateModel>, { userName }: GetUser) {\r\n const req$ = this.http.get<Response<User[]>>(\r\n `Identity/users/${userName}?editMode=true`,\r\n { context: this.context },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.GetUser,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n selectedUser: response.data?.[0] ?? null,\r\n }),\r\n });\r\n }\r\n\r\n @Action(CreateUser)\r\n createUser(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { payload }: CreateUser,\r\n ) {\r\n const req$ = this.http.post<Response<User>>('Identity/user', payload, {\r\n context: this.context,\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.CreateUser,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const newUser = response.data;\r\n if (!newUser) return {};\r\n\r\n return {\r\n users: this.adapter.addOne(state.users as any[], newUser),\r\n selectedUser: newUser,\r\n };\r\n },\r\n onError: (error) => {\r\n throw error;\r\n },\r\n });\r\n }\r\n @Action(AddUserToGroup)\r\n addUserToGroup(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { payload }: AddUserToGroup,\r\n ) {\r\n const req$ = this.http.post<Response<any>>(\r\n `identity/groups/${payload.groupId}/members`,\r\n { member: payload?.userId },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.AddUserToGroup,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const newMembers = response.data?.members ?? [];\r\n const existingMembers = state.selectedGroup?.members ?? [];\r\n\r\n return {\r\n selectedGroup: {\r\n ...(state.selectedGroup ?? {}),\r\n members: [...existingMembers, ...newMembers],\r\n },\r\n };\r\n },\r\n });\r\n }\r\n @Action(UpdateUser)\r\n updateUser(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { changes, userId }: UpdateUser,\r\n ) {\r\n const req$ = this.http.put<Response<User>>(\r\n `Identity/user/${userId}`,\r\n changes,\r\n {\r\n context: this.context,\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.UpdateUser,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const updatedUser = response.data;\r\n if (!updatedUser) return {};\r\n\r\n return {\r\n users: this.adapter.upsertOne(\r\n state.users as any[],\r\n updatedUser,\r\n 'userId' as any,\r\n ),\r\n selectedUser: updatedUser,\r\n };\r\n },\r\n onError: (error) => {\r\n throw error;\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteUser)\r\n deleteUser(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { userName }: DeleteUser,\r\n ) {\r\n const req$ = this.http.delete<Response<void>>(`Identity/user/${userName}`, {\r\n context: this.context,\r\n });\r\n\r\n return this.delete(ctx, {\r\n key: UsersGroupsActionKey.DeleteUser,\r\n request$: req$,\r\n stateProperty: (state) => state.users as any[],\r\n uniqueKey: 'userName' as any,\r\n id: userName,\r\n });\r\n }\r\n @Action(DeleteUserFromGroup)\r\n deleteUserFromGroup(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { payload }: DeleteUserFromGroup,\r\n ) {\r\n const req$ = this.http.delete<Response<void>>(\r\n `identity/groups/${payload.groupId}/members/${payload.userName}`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.DeleteUserFromGroup,\r\n request$: req$,\r\n onSuccess: (_response, state) => {\r\n const filteredMembers =\r\n state.selectedGroup?.members?.filter(\r\n (e) => e.user.userName !== payload.userName,\r\n ) ?? [];\r\n\r\n return {\r\n selectedGroup: {\r\n ...(state.selectedGroup ?? {}),\r\n members: filteredMembers,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(GetGroups)\r\n getGroups(ctx: StateContext<UsersGroupsStateModel>) {\r\n const req$ = this.http.get<Response<Group[]>>('Identity/groups');\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.GetGroups,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n groups: response.data ?? [],\r\n }),\r\n });\r\n }\r\n @Action(GetGroup)\r\n getGroup(ctx: StateContext<UsersGroupsStateModel>, { groupId }: GetGroup) {\r\n const req$ = this.http.get<Response<Group>>(\r\n `Identity/groups/${groupId}?Mode=edit`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.GetGroup,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n selectedGroup: response.data ?? null,\r\n }),\r\n });\r\n }\r\n\r\n @Action(CreateGroup)\r\n createGroup(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { payload }: CreateGroup,\r\n ) {\r\n const req$ = this.http.post<Response<any>>('Identity/groups', payload);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.CreateGroup,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const newGroup = response.data?.result ?? null;\r\n if (!newGroup) return {};\r\n\r\n return {\r\n groups: this.adapter.addOne(state.groups as any[], newGroup),\r\n selectedGroup: newGroup,\r\n };\r\n },\r\n });\r\n }\r\n @Action(UpdateGroup)\r\n updateGroup(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { changes, groupId }: UpdateGroup,\r\n ) {\r\n const req$ = this.http.put<Response<Group>>(\r\n `Identity/groups/${groupId}`,\r\n changes,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.UpdateGroup,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const updatedGroup = {\r\n ...response.data,\r\n members: state.selectedGroup?.members,\r\n membersCount: state.selectedGroup?.members?.length ?? 0,\r\n };\r\n\r\n return {\r\n groups: this.adapter.upsertOne(\r\n state.groups as any[],\r\n updatedGroup,\r\n 'id' as any,\r\n ),\r\n selectedGroup: updatedGroup,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteGroup)\r\n deleteGroup(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { groupId }: DeleteGroup,\r\n ) {\r\n const req$ = this.http.delete<Response<void>>(`Identity/groups/${groupId}`);\r\n\r\n return this.delete(ctx, {\r\n key: UsersGroupsActionKey.DeleteGroup,\r\n request$: req$,\r\n stateProperty: (state) => state.groups as any[],\r\n uniqueKey: 'id' as any,\r\n id: groupId,\r\n });\r\n }\r\n // ============================================================================\r\n // Simple State Updates (No HTTP)\r\n // ============================================================================\r\n\r\n @Action(ClearSelectedGroup)\r\n clearSelectedGroup(ctx: StateContext<UsersGroupsStateModel>) {\r\n ctx.patchState({ selectedGroup: null });\r\n }\r\n}\r\n","import { UsersGroupsState } from './users-groups.state';\r\nimport { Injectable, computed, inject } from '@angular/core';\r\nimport { select, Store } from '@ngxs/store';\r\nimport {\r\n CreateUser,\r\n UpdateUser,\r\n DeleteUser,\r\n GetUsers,\r\n GetUser,\r\n CreateGroup,\r\n UpdateGroup,\r\n DeleteGroup,\r\n GetGroups,\r\n GetGroup,\r\n ClearSelectedGroup,\r\n AddUserToGroup,\r\n DeleteUserFromGroup,\r\n} from './users-groups.actions';\r\nimport { User, Group, UsersGroupsActionKey } from './users-groups.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UsersGroupsFacade {\r\n private readonly store = inject(Store);\r\n\r\n // ============================================================================\r\n // Data Selectors - Memoized by NGXS (fine-grained reactivity)\r\n // ============================================================================\r\n readonly users = select(UsersGroupsState.getUsers);\r\n readonly selectedUser = select(UsersGroupsState.getSelectedUser);\r\n readonly groups = select(UsersGroupsState.getGroups);\r\n readonly selectedGroup = select(UsersGroupsState.getSelectedGroup);\r\n\r\n // ============================================================================\r\n // Loading/Error Slices - Memoized by NGXS\r\n // ============================================================================\r\n private readonly loadingActive = select(UsersGroupsState.getLoadingActive);\r\n\r\n // ============================================================================\r\n // Loading Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly isLoadingUsers = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.GetUsers),\r\n );\r\n readonly isLoadingUser = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.GetUser),\r\n );\r\n readonly isSavingUser = computed(\r\n () =>\r\n this.loadingActive().includes(UsersGroupsActionKey.CreateUser) ||\r\n this.loadingActive().includes(UsersGroupsActionKey.UpdateUser),\r\n );\r\n readonly isDeletingUser = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.DeleteUser),\r\n );\r\n\r\n readonly isLoadingGroups = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.GetGroups),\r\n );\r\n readonly isLoadingGroup = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.GetGroup),\r\n );\r\n readonly isSavingGroup = computed(\r\n () =>\r\n this.loadingActive().includes(UsersGroupsActionKey.CreateGroup) ||\r\n this.loadingActive().includes(UsersGroupsActionKey.UpdateGroup),\r\n );\r\n readonly isDeletingGroup = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.DeleteGroup),\r\n );\r\n\r\n readonly isAddingUserToGroup = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.AddUserToGroup),\r\n );\r\n readonly isDeletingUserFromGroup = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.DeleteUserFromGroup),\r\n );\r\n\r\n // ============================================================================\r\n // Action Dispatchers\r\n // ============================================================================\r\n getUsers() {\r\n return this.store.dispatch(new GetUsers());\r\n }\r\n\r\n getUser(id: string | null) {\r\n return this.store.dispatch(new GetUser(id));\r\n }\r\n\r\n createUser(payload: Partial<User>) {\r\n return this.store.dispatch(new CreateUser(payload));\r\n }\r\n\r\n addUserToGroup(userId: string, groupId: string) {\r\n return this.store.dispatch(new AddUserToGroup({ userId, groupId }));\r\n }\r\n\r\n deleteUserFromGroup(payload: any) {\r\n return this.store.dispatch(new DeleteUserFromGroup(payload));\r\n }\r\n\r\n updateUser(id: string | undefined, changes: Partial<User>) {\r\n return this.store.dispatch(new UpdateUser(id, changes));\r\n }\r\n\r\n deleteUser(userName: string | number) {\r\n return this.store.dispatch(new DeleteUser(userName));\r\n }\r\n\r\n getGroups() {\r\n return this.store.dispatch(new GetGroups());\r\n }\r\n\r\n getGroup(id: string | number | null) {\r\n return this.store.dispatch(new GetGroup(id));\r\n }\r\n\r\n createGroup(payload: Partial<Group>) {\r\n return this.store.dispatch(new CreateGroup(payload));\r\n }\r\n\r\n updateGroup(id: string | number | undefined, changes: Partial<Group>) {\r\n return this.store.dispatch(new UpdateGroup(id, changes));\r\n }\r\n\r\n deleteGroup(groupId: string | number) {\r\n return this.store.dispatch(new DeleteGroup(groupId));\r\n }\r\n\r\n clearSelectedGroup() {\r\n this.store.dispatch(new ClearSelectedGroup());\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, inject, OnInit, signal } from '@angular/core';\r\nimport { Breadcrumb } from '@masterteam/components/breadcrumb';\r\nimport { UsersGroupsFacade } from '../../store/users-groups';\r\nimport { ActivatedRoute, Router, RouterOutlet } from '@angular/router';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Page } from '@masterteam/components/page';\r\nimport { PageHeaderTab } from '@masterteam/components/page-header';\r\nimport { Button } from '@masterteam/components/button';\r\n\r\n@Component({\r\n selector: 'mt-users-groups',\r\n styleUrl: './users-groups.css',\r\n templateUrl: './users-groups.html',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Page,\r\n Breadcrumb,\r\n RouterOutlet,\r\n TranslocoDirective,\r\n Button,\r\n ],\r\n})\r\nexport default class UsersGroups implements OnInit {\r\n protected readonly facade = inject(UsersGroupsFacade);\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly router = inject(Router);\r\n protected readonly translocoService = inject(TranslocoService);\r\n selectedTab = signal<string>('users');\r\n\r\n tabsList: PageHeaderTab[] = [\r\n {\r\n label: this.translocoService.translate('users-groups.users'),\r\n value: 'users',\r\n },\r\n {\r\n label: this.translocoService.translate('users-groups.groups'),\r\n value: 'groups',\r\n },\r\n ];\r\n breadcrumbItems: { label?: string; routerLink?: string; icon?: string }[] = [\r\n {\r\n label: '',\r\n icon: 'general.home-line',\r\n routerLink: '/control-panel/workspaces',\r\n },\r\n {\r\n label: this.translocoService.translate(\r\n 'product-settings.product-settings',\r\n ),\r\n routerLink: '/control-panel/product-settings',\r\n },\r\n { label: this.translocoService.translate('users-groups.users-groups') },\r\n ];\r\n\r\n ngOnInit() {\r\n const selectedTab = this.route.snapshot.firstChild?.data['componentType'];\r\n this.selectedTab.set(selectedTab || 'users');\r\n this.facade.getUsers();\r\n }\r\n\r\n goBack() {\r\n this.router.navigate(['control-panel/product-settings']);\r\n }\r\n\r\n onTabChange(event: any) {\r\n this.selectedTab.set(event);\r\n if (event == 'users') {\r\n this.router.navigate(['users'], { relativeTo: this.route });\r\n } else if (event == 'groups') {\r\n this.router.navigate(['groups'], { relativeTo: this.route });\r\n }\r\n }\r\n\r\n getUsers() {\r\n this.facade.getUsers();\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <mt-page\r\n [title]=\"t('users-groups')\"\r\n [avatarIcon]=\"'user.user-circle'\"\r\n [avatarStyle]=\"{\r\n '--p-avatar-background': 'var(--p-sky-100)',\r\n '--p-avatar-color': 'var(--p-sky-700)',\r\n }\"\r\n [tabs]=\"tabsList\"\r\n [activeTab]=\"selectedTab()\"\r\n (tabChange)=\"onTabChange($event)\"\r\n (backButtonClick)=\"goBack()\"\r\n backButton\r\n >\r\n <div class=\"flex justify-between items-end\">\r\n <div>\r\n <h3 class=\"font-bold text-lg\">{{ t(\"users-groups\") }}</h3>\r\n <mt-breadcrumb\r\n [items]=\"breadcrumbItems\"\r\n [styleClass]=\"'flex justify-start mx-1'\"\r\n ></mt-breadcrumb>\r\n </div>\r\n @if (selectedTab() === \"users\") {\r\n <mt-button\r\n [icon]=\"'arrow.refresh-cw-02'\"\r\n [label]=\"\r\n translocoService.translate('users-groups.sync-users-information')\r\n \"\r\n [severity]=\"'primary'\"\r\n [variant]=\"'outlined'\"\r\n [size]=\"'small'\"\r\n (click)=\"getUsers()\"\r\n class=\"mx-4\"\r\n >\r\n </mt-button>\r\n }\r\n </div>\r\n <router-outlet />\r\n </mt-page>\r\n</ng-container>\r\n","import {\r\n Component,\r\n inject,\r\n OnInit,\r\n signal,\r\n effect,\r\n input,\r\n computed,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\n// Masterteam dialog\r\nimport { DialogService, ModalRef } from '@masterteam/components/dialog';\r\nimport { DynamicFormConfig, ValidatorConfig } from '@masterteam/components';\r\nimport { User, UsersGroupsFacade } from '../../../../../store/users-groups';\r\nimport { UserSearchFieldConfig } from '@masterteam/components';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport {\r\n TranslocoDirective,\r\n TranslocoPipe,\r\n TranslocoService,\r\n} from '@jsverse/transloco';\r\nimport { HttpContext } from '@angular/common/http';\r\nimport { REQUEST_CONTEXT } from '@masterteam/components';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { UploadFileFieldConfig } from '@masterteam/components';\r\n\r\n@Component({\r\n selector: 'mt-user-form',\r\n templateUrl: './user-form.html',\r\n styleUrls: ['./user-form.css'],\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Button,\r\n TranslocoDirective,\r\n SkeletonModule,\r\n DynamicForm,\r\n ReactiveFormsModule,\r\n Tabs,\r\n TranslocoPipe,\r\n ],\r\n providers: [DialogService],\r\n})\r\nexport default class UserForm implements OnInit {\r\n modal = inject(ModalService);\r\n ref: ModalRef = inject(ModalRef);\r\n userForEdit = input<User | null>(null);\r\n selectedTab = signal<string>('internal');\r\n private readonly translocoService = inject(TranslocoService);\r\n tabsList = [\r\n {\r\n label: this.translocoService.translate('users-groups.internal'),\r\n value: 'internal',\r\n },\r\n {\r\n label: this.translocoService.translate('users-groups.external'),\r\n value: 'external',\r\n },\r\n ];\r\n private readonly facade = inject(UsersGroupsFacade);\r\n selectedUser = this.facade.selectedUser;\r\n internalUserFormControl = new FormControl();\r\n externalUserFormControl = new FormControl();\r\n getUserFormLoading = this.facade.isLoadingUser;\r\n createUpdateUserLoading = this.facade.isSavingUser;\r\n context = new HttpContext().set(REQUEST_CONTEXT, {\r\n useBaseUrl: true,\r\n });\r\n internalUserFormConfig = signal<DynamicFormConfig>({\r\n sections: [\r\n {\r\n key: 'internalUserFormConfig',\r\n type: 'header',\r\n order: 1,\r\n fields: [\r\n new UserSearchFieldConfig({\r\n key: 'userField',\r\n label: this.translocoService.translate('users-groups.user-name'),\r\n apiUrl: 'Identity/adUsers',\r\n context: this.context,\r\n validators: [ValidatorConfig.required()],\r\n order: 1,\r\n }),\r\n ],\r\n },\r\n ],\r\n });\r\n\r\n fieldColSpan = computed(() => (this.userForEdit()?.userName ? 12 : 6));\r\n externalUserFormConfig = computed<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'externalUserFormConfig',\r\n type: 'header',\r\n order: 1,\r\n fields: [\r\n new UploadFileFieldConfig({\r\n key: 'image',\r\n label: 'Avatar',\r\n shape: 'circle',\r\n endPoint: 'avatar',\r\n context: this.context,\r\n colSpan: 12,\r\n order: 1,\r\n }),\r\n {\r\n key: 'displayName',\r\n label: this.translocoService.translate('users-groups.display-name'),\r\n placeholder: this.translocoService.translate(\r\n 'users-groups.display-name',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n colSpan: this.fieldColSpan(),\r\n order: 2,\r\n },\r\n {\r\n key: 'email',\r\n label: this.translocoService.translate('users-groups.email'),\r\n placeholder: this.translocoService.translate('users-groups.email'),\r\n inputType: 'email',\r\n required: true,\r\n validators: [\r\n ValidatorConfig.required('Email is required'),\r\n ValidatorConfig.email('Please enter a valid email address'),\r\n ],\r\n colSpan: this.fieldColSpan(),\r\n order: 4,\r\n },\r\n {\r\n key: 'mobile',\r\n label: this.translocoService.translate('users-groups.mobile'),\r\n placeholder: this.translocoService.translate('users-groups.mobile'),\r\n validators: [ValidatorConfig.required()],\r\n colSpan: this.fieldColSpan(),\r\n order: 5,\r\n },\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n effect(() => {\r\n const userName = this.userForEdit()?.userName;\r\n if (this.selectedUser() && userName) {\r\n this.selectedTab.set('external');\r\n const data = {\r\n ...this.selectedUser(),\r\n image: this.selectedUser()?.photo,\r\n };\r\n this.externalUserFormControl.patchValue(data);\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.userForEdit()?.userName) {\r\n this.facade.getUser(this.userForEdit()?.userName || null);\r\n }\r\n this.updateFormFields();\r\n }\r\n\r\n onSubmit() {\r\n if (this.userForEdit()?.userName) {\r\n const payload = {\r\n displayName: this.externalUserFormControl.value?.displayName,\r\n email: this.externalUserFormControl.value?.email,\r\n mobile: this.externalUserFormControl.value?.mobile,\r\n image: this.externalUserFormControl.value?.image?.fileName,\r\n };\r\n this.facade.updateUser(this.userForEdit()?.userId, payload).subscribe({\r\n next: () => {\r\n this.ref.close(true);\r\n },\r\n error: () => {},\r\n });\r\n } else {\r\n let payload: Partial<User> = {};\r\n if (this.selectedTab() === 'internal') {\r\n payload = {\r\n userName: this.internalUserFormControl.value?.userField?.userName,\r\n isExternal: false,\r\n };\r\n } else {\r\n payload = {\r\n userId: '',\r\n userName: this.externalUserFormControl.value?.userName,\r\n displayName: this.externalUserFormControl.value?.displayName,\r\n email: this.externalUserFormControl.value?.email,\r\n mobile: this.externalUserFormControl.value?.mobile,\r\n password: this.externalUserFormControl.value?.password,\r\n isExternal: true,\r\n image: this.externalUserFormControl.value?.image?.fileName,\r\n };\r\n }\r\n\r\n this.facade.createUser(payload).subscribe({\r\n next: () => {\r\n this.ref.close(true);\r\n },\r\n error: () => {},\r\n });\r\n }\r\n }\r\n\r\n updateFormFields() {\r\n if (!this.userForEdit()?.userName) {\r\n this.externalUserFormConfig().sections[0].fields.push(\r\n {\r\n key: 'userName',\r\n label: this.translocoService.translate('users-groups.user-name'),\r\n placeholder: this.translocoService.translate(\r\n 'users-groups.user-name',\r\n ),\r\n validators: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.pattern('^[a-zA-Z0-9]+$'),\r\n ],\r\n colSpan: 6,\r\n order: 3,\r\n hidden: !!this.userForEdit()?.userName,\r\n },\r\n {\r\n key: 'password',\r\n label: this.translocoService.translate('users-groups.password'),\r\n placeholder: this.translocoService.translate('users-groups.password'),\r\n validators: [ValidatorConfig.required()],\r\n inputType: 'password',\r\n colSpan: 6,\r\n order: 6,\r\n hidden: !!this.userForEdit()?.userName,\r\n },\r\n {\r\n key: 'confirmPassword',\r\n label: this.translocoService.translate(\r\n 'users-groups.confirm-password',\r\n ),\r\n placeholder: this.translocoService.translate(\r\n 'users-groups.confirm-password',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n inputType: 'password',\r\n colSpan: 6,\r\n order: 6,\r\n hidden: !!this.userForEdit()?.userName,\r\n },\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport function passwordMatchValidator(\r\n passwordControlName: string,\r\n confirmPasswordControlName: string,\r\n): ValidatorFn {\r\n return (group: AbstractControl): ValidationErrors | null => {\r\n // 1. Get the controls from the group\r\n const passwordControl = group.get(passwordControlName);\r\n const confirmPasswordControl = group.get(confirmPasswordControlName);\r\n\r\n // 2. Basic checks (if controls don't exist, or if one is null, it's not a mismatch error)\r\n if (!passwordControl || !confirmPasswordControl) {\r\n return null;\r\n }\r\n\r\n // 3. Check for value mismatch\r\n if (passwordControl.value !== confirmPasswordControl.value) {\r\n // 4. Set the error on the 'confirm password' control for clearer user feedback\r\n confirmPasswordControl.setErrors({ mismatch: true });\r\n return { mismatch: true }; // The group itself has a mismatch error\r\n } else {\r\n // 5. If they match, clear any previous mismatch error on the 'confirm password' control\r\n if (confirmPasswordControl.hasError('mismatch')) {\r\n const errors = confirmPasswordControl.errors;\r\n if (errors) {\r\n delete errors['mismatch'];\r\n confirmPasswordControl.setErrors(\r\n Object.keys(errors).length > 0 ? errors : null,\r\n );\r\n }\r\n }\r\n return null; // No mismatch error\r\n }\r\n };\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div [class]=\"'flex flex-col gap-1 p-4 ' + modal.contentClass\">\r\n @if (!getUserFormLoading()) {\r\n <div class=\"flex justify-center\">\r\n <div class=\"w-60\">\r\n <mt-tabs\r\n [(active)]=\"selectedTab\"\r\n [options]=\"tabsList\"\r\n fluid\r\n size=\"small\"\r\n [disabled]=\"!!this.userForEdit()?.userName\"\r\n ></mt-tabs>\r\n </div>\r\n </div>\r\n\r\n <form class=\"col-span-1\">\r\n @if (selectedTab() === \"internal\") {\r\n <mt-dynamic-form\r\n [formConfig]=\"internalUserFormConfig()\"\r\n [formControl]=\"internalUserFormControl\"\r\n />\r\n } @else {\r\n <mt-dynamic-form\r\n [formConfig]=\"externalUserFormConfig()\"\r\n [formControl]=\"externalUserFormControl\"\r\n />\r\n }\r\n </form>\r\n } @else {\r\n <p-skeleton class=\"my-4 mt-7\" height=\"3rem\" />\r\n <p-skeleton class=\"my-4\" height=\"3rem\" />\r\n <p-skeleton class=\"my-4\" height=\"3rem\" />\r\n }\r\n </div>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"selectedUser() ? ('save' | transloco) : ('add' | transloco)\"\r\n (click)=\"onSubmit()\"\r\n [loading]=\"createUpdateUserLoading()\"\r\n [disabled]=\"\r\n selectedTab() === 'internal'\r\n ? !this.internalUserFormControl.valid\r\n : !this.externalUserFormControl.valid\r\n \"\r\n />\r\n </div>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n computed,\r\n inject,\r\n linkedSignal,\r\n OnInit,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ColumnDef, Table, TableAction } from '@masterteam/components/table';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { UsersGroupsFacade } from '../../../../store/users-groups';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport UserForm from './user-form/user-form';\r\nimport { finalize } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'mt-users',\r\n styleUrl: './users.css',\r\n templateUrl: './users.html',\r\n standalone: true,\r\n imports: [CommonModule, SkeletonModule, Table, Avatar, TranslocoDirective],\r\n})\r\nexport default class Users implements OnInit {\r\n typeCol = viewChild.required<TemplateRef<any>>('typeCol');\r\n userCol = viewChild.required<TemplateRef<any>>('userCol');\r\n\r\n private readonly facade = inject(UsersGroupsFacade);\r\n readonly modal: ModalService = inject(ModalService);\r\n private readonly translocoService = inject(TranslocoService);\r\n\r\n users = computed(() => {\r\n const tab = this.activeTab();\r\n const all = this.allUsers();\r\n\r\n switch (tab) {\r\n case 'internal':\r\n return all.filter((user) => !user.isExternal);\r\n case 'external':\r\n return all.filter((user) => user.isExternal);\r\n case 'all':\r\n default:\r\n return all;\r\n }\r\n });\r\n\r\n tabs = signal([\r\n {\r\n label: this.translocoService.translate('users-groups.all'),\r\n value: 'all',\r\n },\r\n {\r\n label: this.translocoService.translate('users-groups.internal'),\r\n value: 'internal',\r\n },\r\n {\r\n label: this.translocoService.translate('users-groups.external'),\r\n value: 'external',\r\n },\r\n ]);\r\n activeTab = signal<string>('all');\r\n tableActions = signal<TableAction[]>([\r\n {\r\n icon: 'general.plus',\r\n label: this.translocoService.translate('users-groups.add-user'),\r\n color: 'primary',\r\n action: () => {\r\n this.addUserDialog();\r\n },\r\n },\r\n ]);\r\n\r\n deletingRowIds = signal<any[]>([]);\r\n rowActions = signal<TableAction[]>([\r\n {\r\n icon: 'custom.pencil',\r\n tooltip: this.translocoService.translate('edit'),\r\n color: 'primary',\r\n action: (row: any) => {\r\n this.addUserDialog(row);\r\n },\r\n hidden: (row: any) => !row.isExternal,\r\n },\r\n {\r\n icon: 'general.trash-01',\r\n tooltip: this.translocoService.translate('delete'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row: any) => {\r\n this.deletingRowIds.update((ids) => [...ids, row.userName]);\r\n this.facade\r\n .deleteUser(row.userName)\r\n .pipe(\r\n finalize(() => {\r\n this.deletingRowIds.update((ids) =>\r\n ids.filter((id) => id !== row.userName),\r\n );\r\n }),\r\n )\r\n .subscribe();\r\n },\r\n confirmation: {\r\n type: 'popup',\r\n confirmationType: 'delete',\r\n },\r\n loading: (row: any) => this.deletingRowIds().includes(row.userName),\r\n },\r\n ]);\r\n\r\n tableColumns = linkedSignal<ColumnDef[]>(() => [\r\n {\r\n key: 'displayName',\r\n label: this.translocoService.translate('users-groups.user'),\r\n type: 'custom',\r\n customCellTpl: this.userCol(),\r\n filterConfig: {\r\n type: 'text',\r\n label: this.translocoService.translate('users-groups.user'),\r\n },\r\n },\r\n {\r\n key: 'isExternal',\r\n label: this.translocoService.translate('users-groups.type'),\r\n type: 'custom',\r\n customCellTpl: this.typeCol(),\r\n },\r\n {\r\n key: 'email',\r\n label: this.translocoService.translate('users-groups.email'),\r\n filterConfig: {\r\n type: 'text',\r\n label: this.translocoService.translate('users-groups.email'),\r\n },\r\n },\r\n {\r\n key: 'lastLoginTime.displayValue',\r\n label: this.translocoService.translate('users-groups.last-seen'),\r\n },\r\n ]);\r\n\r\n loading = this.facade.isLoadingUsers;\r\n private allUsers = this.facade.users;\r\n\r\n ngOnInit(): void {\r\n this.facade.getUsers();\r\n }\r\n\r\n addUserDialog(user: any | null = null) {\r\n const modalType: 'drawer' | 'dialog' = user ? 'drawer' : 'dialog';\r\n this.modal.openModal(UserForm, modalType, {\r\n header: user\r\n ? this.translocoService.translate('users-groups.edit-user')\r\n : this.translocoService.translate('users-groups.add-user'),\r\n styleClass:\r\n modalType === 'drawer'\r\n ? '!w-[30rem] !absolute !shadow-none'\r\n : '!w-[50rem]',\r\n position: modalType === 'drawer' ? 'end' : '',\r\n appendTo: modalType === 'drawer' ? 'page-content' : 'body',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: {\r\n userForEdit: user,\r\n },\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div class=\"mt-5\">\r\n <ng-template #typeCol let-row>\r\n <div>{{ row.isExternal ? t(\"external\") : t(\"internal\") }}</div>\r\n </ng-template>\r\n <ng-template #userCol let-row>\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar [icon]=\"'custom.user-pp'\"> </mt-avatar> {{ row.displayName }}\r\n </div>\r\n </ng-template>\r\n\r\n <mt-table\r\n [tabs]=\"tabs()\"\r\n [(activeTab)]=\"activeTab\"\r\n [data]=\"users()\"\r\n [columns]=\"tableColumns()\"\r\n [actions]=\"tableActions()\"\r\n [rowActions]=\"rowActions()\"\r\n [generalSearch]=\"true\"\r\n [showFilters]=\"true\"\r\n [loading]=\"loading()\"\r\n >\r\n </mt-table>\r\n </div>\r\n</ng-container>\r\n","import {\r\n Component,\r\n inject,\r\n OnInit,\r\n signal,\r\n input,\r\n TemplateRef,\r\n viewChild,\r\n linkedSignal,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { DialogService, ModalRef } from '@masterteam/components/dialog';\r\nimport {\r\n DynamicFormConfig,\r\n TextareaFieldConfig,\r\n UserSearchFieldConfig,\r\n ValidatorConfig,\r\n} from '@masterteam/components';\r\nimport { Group, UsersGroupsFacade } from '../../../../../store/users-groups';\r\nimport {\r\n TranslocoDirective,\r\n TranslocoPipe,\r\n TranslocoService,\r\n} from '@jsverse/transloco';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { REQUEST_CONTEXT } from '@masterteam/components';\r\nimport { HttpContext } from '@angular/common/http';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { ColumnDef, Table, TableAction } from '@masterteam/components/table';\r\nimport { finalize } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'mt-group-form',\r\n templateUrl: './group-form.html',\r\n styleUrls: ['./group-form.css'],\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Button,\r\n TranslocoDirective,\r\n SkeletonModule,\r\n DynamicForm,\r\n ReactiveFormsModule,\r\n TranslocoPipe,\r\n Avatar,\r\n Table,\r\n ],\r\n providers: [DialogService],\r\n})\r\nexport default class GroupForm implements OnInit {\r\n modal = inject(ModalService);\r\n ref: ModalRef = inject(ModalRef);\r\n groupForEdit = input<Group | null>(null);\r\n private readonly translocoService = inject(TranslocoService);\r\n private readonly facade = inject(UsersGroupsFacade);\r\n selectedGroup = this.facade.selectedGroup;\r\n groupFormControl = new FormControl();\r\n getGroupFormLoading = this.facade.isLoadingGroup;\r\n createUpdateGroupLoading = this.facade.isSavingGroup;\r\n addUserToGroupLoading = this.facade.isAddingUserToGroup;\r\n deleteUserFromGroupLoading = this.facade.isDeletingUserFromGroup;\r\n internalUserFormControl = new FormControl();\r\n userCol = viewChild.required<TemplateRef<any>>('userCol');\r\n isUserExistInMembers = signal<boolean>(false);\r\n context = new HttpContext().set(REQUEST_CONTEXT, {\r\n useBaseUrl: true,\r\n });\r\n groupFormConfig = signal<DynamicFormConfig>({\r\n sections: [\r\n {\r\n key: 'groupFormConfig',\r\n type: 'header',\r\n order: 1,\r\n fields: [\r\n {\r\n key: 'name.en',\r\n label: this.translocoService.translate(\r\n 'users-groups.group-name-en',\r\n ),\r\n placeholder: this.translocoService.translate(\r\n 'users-groups.group-name-en',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n order: 1,\r\n },\r\n {\r\n key: 'name.ar',\r\n label: this.translocoService.translate(\r\n 'users-groups.group-name-ar',\r\n ),\r\n placeholder: this.translocoService.translate(\r\n 'users-groups.group-name-ar',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n order: 1,\r\n },\r\n\r\n new TextareaFieldConfig({\r\n key: 'description',\r\n label: this.translocoService.translate('users-groups.description'),\r\n placeholder: this.translocoService.translate(\r\n 'users-groups.description',\r\n ),\r\n order: 3,\r\n }),\r\n ],\r\n },\r\n ],\r\n });\r\n\r\n usersLoading = signal<boolean>(false);\r\n internalUserFormConfig = signal<DynamicFormConfig>({\r\n sections: [\r\n {\r\n key: 'internalUserFormConfig',\r\n type: 'header',\r\n order: 1,\r\n fields: [\r\n new UserSearchFieldConfig({\r\n key: 'userField',\r\n label: this.translocoService.translate('users-groups.user-name'),\r\n apiUrl: 'identity/users',\r\n context: this.context,\r\n order: 1,\r\n }),\r\n ],\r\n },\r\n ],\r\n });\r\n tableColumns = linkedSignal<ColumnDef[]>(() => [\r\n {\r\n key: 'displayName',\r\n label: this.translocoService.translate('users-groups.user'),\r\n type: 'custom',\r\n customCellTpl: this.userCol(),\r\n },\r\n ]);\r\n\r\n deletingRowIds = signal<any[]>([]);\r\n rowActions = signal<TableAction[]>([\r\n {\r\n icon: 'general.trash-01',\r\n tooltip: this.translocoService.translate('delete'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row: any) => {\r\n this.deletingRowIds.update((ids) => [...ids, row?.user?.userName]);\r\n this.facade\r\n .deleteUserFromGroup({\r\n userName: row?.user?.userName,\r\n groupId: this.groupForEdit()?.id as string,\r\n })\r\n .pipe(\r\n finalize(() => {\r\n this.deletingRowIds.update((ids) =>\r\n ids.filter((id) => id !== row?.user?.userName),\r\n );\r\n }),\r\n )\r\n .subscribe();\r\n },\r\n confirmation: {\r\n type: 'popup',\r\n confirmationType: 'delete',\r\n },\r\n loading: (row: any) =>\r\n this.deletingRowIds().includes(row?.user?.userName),\r\n },\r\n ]);\r\n constructor() {\r\n // effect(() => {\r\n // const groupId = this.groupForEdit()?.id;\r\n // if (this.selectedGroup() && groupId) {\r\n // this.groupFormControl.patchValue(this.selectedGroup());\r\n // }\r\n // });\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.groupForEdit()?.id) {\r\n this.facade.getGroup(this.groupForEdit()?.id || null).subscribe((_) => {\r\n if (this.selectedGroup()) {\r\n this.groupFormControl.patchValue(this.selectedGroup());\r\n }\r\n });\r\n }\r\n\r\n this.internalUserFormControl.valueChanges.subscribe((value) => {\r\n const isUserExistInMembers = this.selectedGroup()?.members?.find(\r\n (member) => member?.user?.userId === value?.userField?.userId,\r\n );\r\n this.isUserExistInMembers.set(isUserExistInMembers);\r\n });\r\n }\r\n\r\n onSubmit() {\r\n if (this.groupForEdit()?.id) {\r\n const payload = {\r\n name: this.groupFormControl.value?.name,\r\n workspace: this.groupFormControl.value?.workspace,\r\n description: this.groupFormControl.value?.description,\r\n };\r\n this.facade.updateGroup(this.groupForEdit()?.id, payload).subscribe({\r\n next: () => {\r\n this.ref.close(true);\r\n },\r\n error: () => {},\r\n });\r\n } else {\r\n const payload: Partial<Group> = {\r\n name: this.groupFormControl.value?.name,\r\n workspace: this.groupFormControl.value?.workspace,\r\n description: this.groupFormControl.value?.description,\r\n };\r\n\r\n this.facade.createGroup(payload).subscribe({\r\n next: () => {\r\n this.ref.close(true);\r\n },\r\n error: () => {},\r\n });\r\n }\r\n }\r\n\r\n onAddUser() {\r\n if (\r\n this.internalUserFormControl.value.userField.userId &&\r\n !this.isUserExistInMembers()\r\n ) {\r\n this.facade\r\n .addUserToGroup(\r\n this.internalUserFormControl.value.userField.userName,\r\n this.groupForEdit()?.id as string,\r\n )\r\n .subscribe((_) => {\r\n this.internalUserFormControl.setValue({ userField: null });\r\n });\r\n }\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div [class]=\"'flex flex-col gap-1 p-4 ' + modal.contentClass\">\r\n @if (!getGroupFormLoading()) {\r\n <form class=\"col-span-1\">\r\n <mt-dynamic-form\r\n [formConfig]=\"groupFormConfig()\"\r\n [formControl]=\"groupFormControl\"\r\n />\r\n </form>\r\n\r\n @if (groupForEdit()) {\r\n <div class=\"flex gap-3 items-end mt-6 pt-4 border-t-1 border-surface\">\r\n <mt-dynamic-form\r\n class=\"flex-1\"\r\n [formConfig]=\"internalUserFormConfig()\"\r\n [formControl]=\"internalUserFormControl\"\r\n />\r\n <mt-button\r\n icon=\"general.plus\"\r\n class=\"mb-0\"\r\n variant=\"outlined\"\r\n (click)=\"onAddUser()\"\r\n [disabled]=\"\r\n addUserToGroupLoading() ||\r\n isUserExistInMembers() ||\r\n !internalUserFormControl.value?.userField\r\n \"\r\n />\r\n </div>\r\n\r\n <mt-table\r\n [data]=\"selectedGroup()?.members || []\"\r\n [columns]=\"tableColumns()\"\r\n [rowActions]=\"rowActions()\"\r\n [generalSearch]=\"false\"\r\n [showFilters]=\"false\"\r\n [loading]=\"addUserToGroupLoading()\"\r\n >\r\n </mt-table>\r\n <ng-template #userCol let-row>\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar [icon]=\"'custom.user-pp'\"> </mt-avatar>\r\n {{ row?.user?.displayName }}\r\n </div>\r\n </ng-template>\r\n }\r\n } @else {\r\n <p-skeleton class=\"my-4 mt-7\" height=\"3rem\" />\r\n <p-skeleton class=\"my-4\" height=\"3rem\" />\r\n <p-skeleton class=\"my-4\" height=\"3rem\" />\r\n }\r\n </div>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"selectedGroup() ? ('save' | transloco) : ('add' | transloco)\"\r\n (click)=\"onSubmit()\"\r\n [loading]=\"createUpdateGroupLoading()\"\r\n [disabled]=\"!this.groupFormControl.valid\"\r\n />\r\n </div>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n inject,\r\n linkedSignal,\r\n OnInit,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ColumnDef, Table, TableAction } from '@masterteam/components/table';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport GroupForm from './group-form/group-form';\r\nimport { UsersGroupsFacade } from '../../../../store/users-groups';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { finalize } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'mt-groups',\r\n styleUrl: './groups.css',\r\n templateUrl: './groups.html',\r\n standalone: true,\r\n imports: [CommonModule, SkeletonModule, Table, TranslocoDirective],\r\n})\r\nexport default class Groups implements OnInit {\r\n workspaceCol = viewChild.required<TemplateRef<any>>('workspaceCol');\r\n groupCol = viewChild.required<TemplateRef<any>>('groupCol');\r\n\r\n private readonly facade = inject(UsersGroupsFacade);\r\n readonly modal: ModalService = inject(ModalService);\r\n private readonly translocoService = inject(TranslocoService);\r\n\r\n activeTab = signal<string>('all');\r\n tableActions = signal<TableAction[]>([\r\n {\r\n icon: 'general.plus',\r\n label: this.translocoService.translate('users-groups.add-group'),\r\n color: 'primary',\r\n action: () => {\r\n this.addGroupDialog();\r\n },\r\n },\r\n ]);\r\n\r\n deletingRowIds = signal<any[]>([]);\r\n rowActions = signal<TableAction[]>([\r\n {\r\n icon: 'custom.pencil',\r\n tooltip: this.translocoService.translate('edit'),\r\n color: 'primary',\r\n action: (row: any) => {\r\n this.facade.clearSelectedGroup();\r\n this.addGroupDialog(row);\r\n },\r\n },\r\n {\r\n icon: 'general.trash-01',\r\n tooltip: this.translocoService.translate('delete'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row: any) => {\r\n this.deletingRowIds.update((ids) => [...ids, row.id]);\r\n this.facade\r\n .deleteGroup(row.id)\r\n .pipe(\r\n finalize(() => {\r\n this.deletingRowIds.update((ids) =>\r\n ids.filter((id) => id !== row.id),\r\n );\r\n }),\r\n )\r\n .subscribe();\r\n },\r\n confirmation: {\r\n type: 'popup',\r\n confirmationType: 'delete',\r\n },\r\n loading: (row: any) => this.deletingRowIds().includes(row.id),\r\n },\r\n ]);\r\n\r\n tableColumns = linkedSignal<ColumnDef[]>(() => [\r\n {\r\n key: 'name',\r\n label: this.translocoService.translate('users-groups.group'),\r\n type: 'custom',\r\n customCellTpl: this.groupCol(),\r\n filterConfig: {\r\n type: 'text',\r\n label: this.translocoService.translate('users-groups.group'),\r\n },\r\n },\r\n {\r\n key: 'membersCount',\r\n label: this.translocoService.translate('users-groups.users'),\r\n },\r\n ]);\r\n\r\n loading = this.facade.isLoadingGroups;\r\n allGroups = this.facade.groups;\r\n\r\n ngOnInit(): void {\r\n this.facade.getGroups();\r\n }\r\n\r\n addGroupDialog(group: any | null = null) {\r\n const modalType: 'drawer' | 'dialog' = group ? 'drawer' : 'dialog';\r\n this.modal.openModal(GroupForm, modalType, {\r\n header: group\r\n ? this.translocoService.translate('users-groups.edit-group')\r\n : this.translocoService.translate('users-groups.add-group'),\r\n styleClass: '!w-[35rem] !absolute !shadow-none',\r\n position: modalType === 'drawer' ? 'end' : '',\r\n appendTo: modalType === 'drawer' ? 'page-content' : 'body',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: {\r\n groupForEdit: group,\r\n },\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div class=\"mt-5\">\r\n <ng-template #workspaceCol let-row>\r\n <div>{{ row.workspace }}</div>\r\n </ng-template>\r\n <ng-template #groupCol let-row>\r\n <div class=\"flex items-center gap-2\">{{ row.name }}</div>\r\n </ng-template>\r\n\r\n <mt-table\r\n [(activeTab)]=\"activeTab\"\r\n [data]=\"allGroups()\"\r\n [columns]=\"tableColumns()\"\r\n [actions]=\"tableActions()\"\r\n [rowActions]=\"rowActions()\"\r\n [generalSearch]=\"true\"\r\n [showFilters]=\"true\"\r\n [loading]=\"loading()\"\r\n >\r\n </mt-table>\r\n </div>\r\n</ng-container>\r\n","// store/index.ts\r\nexport * from './users-groups';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"masterteam-users-groups.mjs","sources":["../../../../packages/masterteam/users-groups/src/store/users-groups/users-groups.actions.ts","../../../../packages/masterteam/users-groups/src/store/users-groups/users-groups.model.ts","../../../../packages/masterteam/users-groups/src/store/users-groups/users-groups.state.ts","../../../../packages/masterteam/users-groups/src/store/users-groups/users-groups.facade.ts","../../../../packages/masterteam/users-groups/src/lib/users-groups/users-groups.ts","../../../../packages/masterteam/users-groups/src/lib/users-groups/users-groups.html","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/users/user-form/user-form.ts","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/users/user-form/user-form.html","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/users/users.ts","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/users/users.html","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/groups/group-form/group-form.ts","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/groups/group-form/group-form.html","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/groups/groups.ts","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/groups/groups.html","../../../../packages/masterteam/users-groups/src/store/index.ts","../../../../packages/masterteam/users-groups/src/masterteam-users-groups.ts"],"sourcesContent":["import { User, Group } from './users-groups.model';\r\n\r\nexport class GetUsers {\r\n static readonly type = '[UsersGroups] Get Users';\r\n}\r\n\r\nexport class GetUser {\r\n static readonly type = '[UsersGroups] Get One';\r\n constructor(public userName: string | null) {}\r\n}\r\n\r\nexport class CreateUser {\r\n static readonly type = '[UsersGroups] Create User';\r\n constructor(public payload: Partial<User>) {}\r\n}\r\nexport class AddUserToGroup {\r\n static readonly type = '[UsersGroups] Add User To Group';\r\n constructor(\r\n public payload: {\r\n groupId: string;\r\n id: string;\r\n },\r\n ) {}\r\n}\r\n\r\nexport class UpdateUser {\r\n static readonly type = '[UsersGroups] Update User';\r\n constructor(\r\n public id: string | undefined,\r\n public changes: Partial<User>,\r\n ) {}\r\n}\r\n\r\nexport class DeleteUser {\r\n static readonly type = '[UsersGroups] Delete User';\r\n constructor(public userName: string | number) {}\r\n}\r\nexport class DeleteUserFromGroup {\r\n static readonly type = '[UsersGroups] Delete User From Group';\r\n constructor(public payload: any) {}\r\n}\r\n\r\nexport class GetGroups {\r\n static readonly type = '[UsersGroups] Get Groups';\r\n}\r\nexport class ClearSelectedGroup {\r\n static readonly type = '[UsersGroups] Clear Selected Group';\r\n}\r\nexport class GetGroup {\r\n static readonly type = '[UsersGroups] Get One Group';\r\n constructor(public groupId: string | number | null) {}\r\n}\r\n\r\nexport class CreateGroup {\r\n static readonly type = '[UsersGroups] Create Group';\r\n constructor(public payload: Partial<Group>) {}\r\n}\r\n\r\nexport class UpdateGroup {\r\n static readonly type = '[UsersGroups] Update Group';\r\n constructor(\r\n public groupId: string | number | undefined,\r\n public changes: Partial<Group>,\r\n ) {}\r\n}\r\n\r\nexport class DeleteGroup {\r\n static readonly type = '[UsersGroups] Delete Group';\r\n constructor(public groupId: string | number) {}\r\n}\r\n","import { LoadingStateShape } from '../utils/state-helpers';\r\n\r\nexport interface User {\r\n displayName: string;\r\n id: string;\r\n userName: string;\r\n photo?: any;\r\n password?: string;\r\n image?: string;\r\n department?: string | null;\r\n stars?: number;\r\n mobile?: string;\r\n ext?: number;\r\n isExternal?: boolean;\r\n email?: string;\r\n}\r\n\r\nexport interface Group {\r\n id?: string | number;\r\n name?: TranslatedField | string;\r\n description?: TranslatedField | string;\r\n createdAt?: ApiDateValue;\r\n workspace?: any;\r\n members?: any[];\r\n membersCount?: number;\r\n isActivated?: boolean;\r\n applicationId?: number;\r\n}\r\n\r\nexport interface TranslatedField {\r\n display?: string;\r\n en?: string;\r\n ar?: string;\r\n}\r\n\r\nexport interface ApiDateValue {\r\n displayValue?: string;\r\n rawValue?: string;\r\n}\r\n\r\nexport enum UsersGroupsActionKey {\r\n GetUsers = 'getUsers',\r\n GetUser = 'getUser',\r\n CreateUser = 'createUser',\r\n UpdateUser = 'updateUser',\r\n DeleteUser = 'deleteUser',\r\n AddUserToGroup = 'addUserToGroup',\r\n DeleteUserFromGroup = 'deleteUserFromGroup',\r\n GetGroups = 'getGroups',\r\n GetGroup = 'getGroup',\r\n CreateGroup = 'createGroup',\r\n UpdateGroup = 'updateGroup',\r\n DeleteGroup = 'deleteGroup',\r\n}\r\n\r\nexport interface UsersGroupsStateModel extends LoadingStateShape<UsersGroupsActionKey> {\r\n users: User[];\r\n selectedUser: User | null;\r\n groups: Group[];\r\n selectedGroup: Group | null;\r\n}\r\n","import { REQUEST_CONTEXT } from '@masterteam/components';\r\nimport { State, Action, StateContext, Selector } from '@ngxs/store';\r\nimport {\r\n CreateUser,\r\n DeleteUser,\r\n GetUser,\r\n GetUsers,\r\n UpdateUser,\r\n ClearSelectedGroup,\r\n CreateGroup,\r\n DeleteGroup,\r\n GetGroup,\r\n GetGroups,\r\n UpdateGroup,\r\n AddUserToGroup,\r\n DeleteUserFromGroup,\r\n} from './users-groups.actions';\r\nimport {\r\n User,\r\n Group,\r\n UsersGroupsActionKey,\r\n UsersGroupsStateModel,\r\n} from './users-groups.model';\r\nimport { HttpClient, HttpContext } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Response } from './api.model';\r\nimport { CrudStateBase, handleApiRequest } from '@masterteam/components';\r\n\r\n@State<UsersGroupsStateModel>({\r\n name: 'usersGroups',\r\n defaults: {\r\n users: [],\r\n selectedUser: null,\r\n groups: [],\r\n selectedGroup: null,\r\n loadingActive: [],\r\n errors: {},\r\n },\r\n})\r\n@Injectable()\r\nexport class UsersGroupsState extends CrudStateBase<\r\n any,\r\n UsersGroupsStateModel,\r\n UsersGroupsActionKey\r\n> {\r\n private http = inject(HttpClient);\r\n context = new HttpContext().set(REQUEST_CONTEXT, {\r\n useBaseUrl: false,\r\n });\r\n\r\n // ============================================================================\r\n // Data Selectors - Individual selectors for fine-grained reactivity\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getUsers(state: UsersGroupsStateModel): User[] {\r\n return state.users;\r\n }\r\n\r\n @Selector()\r\n static getSelectedUser(state: UsersGroupsStateModel): User | null {\r\n return state.selectedUser;\r\n }\r\n\r\n @Selector()\r\n static getGroups(state: UsersGroupsStateModel): Group[] {\r\n return state.groups;\r\n }\r\n\r\n @Selector()\r\n static getSelectedGroup(state: UsersGroupsStateModel): Group | null {\r\n return state.selectedGroup;\r\n }\r\n\r\n // ============================================================================\r\n // Loading/Error Slice Selectors - REQUIRED for optimal performance\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getLoadingActive(state: UsersGroupsStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(\r\n state: UsersGroupsStateModel,\r\n ): Record<string, string | null> {\r\n return state.errors;\r\n }\r\n\r\n // ============================================================================\r\n // CRUD Actions\r\n // ============================================================================\r\n @Action(GetUsers)\r\n getUsers(ctx: StateContext<UsersGroupsStateModel>) {\r\n const req$ = this.http.get<Response<User[]>>('Identity/users', {\r\n context: this.context,\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.GetUsers,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n users: response.data ?? [],\r\n }),\r\n });\r\n }\r\n @Action(GetUser)\r\n getUser(ctx: StateContext<UsersGroupsStateModel>, { userName }: GetUser) {\r\n const req$ = this.http.get<Response<User[]>>(\r\n `Identity/users/${userName}?editMode=true`,\r\n { context: this.context },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.GetUser,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n selectedUser: response.data?.[0] ?? null,\r\n }),\r\n });\r\n }\r\n\r\n @Action(CreateUser)\r\n createUser(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { payload }: CreateUser,\r\n ) {\r\n const req$ = this.http.post<Response<User>>('Identity/users', payload, {\r\n context: this.context,\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.CreateUser,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const newUser = response.data;\r\n if (!newUser) return {};\r\n\r\n return {\r\n users: this.adapter.addOne(state.users as any[], newUser),\r\n selectedUser: newUser,\r\n };\r\n },\r\n onError: (error) => {\r\n throw error;\r\n },\r\n });\r\n }\r\n @Action(AddUserToGroup)\r\n addUserToGroup(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { payload }: AddUserToGroup,\r\n ) {\r\n const req$ = this.http.post<Response<any>>(\r\n `identity/groups/${payload.groupId}/members`,\r\n { member: payload?.id },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.AddUserToGroup,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const newMembers = response.data?.members ?? [];\r\n const existingMembers = state.selectedGroup?.members ?? [];\r\n\r\n return {\r\n selectedGroup: {\r\n ...(state.selectedGroup ?? {}),\r\n members: [...existingMembers, ...newMembers],\r\n },\r\n };\r\n },\r\n });\r\n }\r\n @Action(UpdateUser)\r\n updateUser(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { changes, id }: UpdateUser,\r\n ) {\r\n const req$ = this.http.put<Response<User>>(\r\n `Identity/users/${id}`,\r\n changes,\r\n {\r\n context: this.context,\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.UpdateUser,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const updatedUser = response.data;\r\n if (!updatedUser) return {};\r\n\r\n return {\r\n users: this.adapter.upsertOne(\r\n state.users as any[],\r\n updatedUser,\r\n 'id' as any,\r\n ),\r\n selectedUser: updatedUser,\r\n };\r\n },\r\n onError: (error) => {\r\n throw error;\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteUser)\r\n deleteUser(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { userName }: DeleteUser,\r\n ) {\r\n const req$ = this.http.delete<Response<void>>(`Identity/user/${userName}`, {\r\n context: this.context,\r\n });\r\n\r\n return this.delete(ctx, {\r\n key: UsersGroupsActionKey.DeleteUser,\r\n request$: req$,\r\n stateProperty: (state) => state.users as any[],\r\n uniqueKey: 'userName' as any,\r\n id: userName,\r\n });\r\n }\r\n @Action(DeleteUserFromGroup)\r\n deleteUserFromGroup(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { payload }: DeleteUserFromGroup,\r\n ) {\r\n const req$ = this.http.delete<Response<void>>(\r\n `identity/groups/${payload.groupId}/members/${payload.userName}`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.DeleteUserFromGroup,\r\n request$: req$,\r\n onSuccess: (_response, state) => {\r\n const filteredMembers =\r\n state.selectedGroup?.members?.filter(\r\n (e) => e.userName !== payload.userName,\r\n ) ?? [];\r\n\r\n return {\r\n selectedGroup: {\r\n ...(state.selectedGroup ?? {}),\r\n members: filteredMembers,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(GetGroups)\r\n getGroups(ctx: StateContext<UsersGroupsStateModel>) {\r\n const req$ = this.http.get<Response<Group[]>>('Identity/groups');\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.GetGroups,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n groups: response.data ?? [],\r\n }),\r\n });\r\n }\r\n @Action(GetGroup)\r\n getGroup(ctx: StateContext<UsersGroupsStateModel>, { groupId }: GetGroup) {\r\n const req$ = this.http.get<Response<Group>>(\r\n `Identity/groups/${groupId}?Mode=edit`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.GetGroup,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n selectedGroup: response.data ?? null,\r\n }),\r\n });\r\n }\r\n\r\n @Action(CreateGroup)\r\n createGroup(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { payload }: CreateGroup,\r\n ) {\r\n const req$ = this.http.post<Response<any>>('Identity/groups', payload);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.CreateGroup,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const newGroup = response.data ?? null;\r\n if (!newGroup) return {};\r\n\r\n return {\r\n groups: this.adapter.addOne(state.groups as any[], newGroup),\r\n selectedGroup: newGroup,\r\n };\r\n },\r\n });\r\n }\r\n @Action(UpdateGroup)\r\n updateGroup(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { changes, groupId }: UpdateGroup,\r\n ) {\r\n const req$ = this.http.put<Response<Group>>(\r\n `Identity/groups/${groupId}`,\r\n changes,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.UpdateGroup,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const updatedGroup = {\r\n ...response.data,\r\n members: state.selectedGroup?.members,\r\n membersCount: state.selectedGroup?.members?.length ?? 0,\r\n };\r\n\r\n return {\r\n groups: this.adapter.upsertOne(\r\n state.groups as any[],\r\n updatedGroup,\r\n 'id' as any,\r\n ),\r\n selectedGroup: updatedGroup,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteGroup)\r\n deleteGroup(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { groupId }: DeleteGroup,\r\n ) {\r\n const req$ = this.http.delete<Response<void>>(`Identity/groups/${groupId}`);\r\n\r\n return this.delete(ctx, {\r\n key: UsersGroupsActionKey.DeleteGroup,\r\n request$: req$,\r\n stateProperty: (state) => state.groups as any[],\r\n uniqueKey: 'id' as any,\r\n id: groupId,\r\n });\r\n }\r\n // ============================================================================\r\n // Simple State Updates (No HTTP)\r\n // ============================================================================\r\n\r\n @Action(ClearSelectedGroup)\r\n clearSelectedGroup(ctx: StateContext<UsersGroupsStateModel>) {\r\n ctx.patchState({ selectedGroup: null });\r\n }\r\n}\r\n","import { UsersGroupsState } from './users-groups.state';\r\nimport { Injectable, computed, inject } from '@angular/core';\r\nimport { select, Store } from '@ngxs/store';\r\nimport {\r\n CreateUser,\r\n UpdateUser,\r\n DeleteUser,\r\n GetUsers,\r\n GetUser,\r\n CreateGroup,\r\n UpdateGroup,\r\n DeleteGroup,\r\n GetGroups,\r\n GetGroup,\r\n ClearSelectedGroup,\r\n AddUserToGroup,\r\n DeleteUserFromGroup,\r\n} from './users-groups.actions';\r\nimport { User, Group, UsersGroupsActionKey } from './users-groups.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UsersGroupsFacade {\r\n private readonly store = inject(Store);\r\n\r\n // ============================================================================\r\n // Data Selectors - Memoized by NGXS (fine-grained reactivity)\r\n // ============================================================================\r\n readonly users = select(UsersGroupsState.getUsers);\r\n readonly selectedUser = select(UsersGroupsState.getSelectedUser);\r\n readonly groups = select(UsersGroupsState.getGroups);\r\n readonly selectedGroup = select(UsersGroupsState.getSelectedGroup);\r\n\r\n // ============================================================================\r\n // Loading/Error Slices - Memoized by NGXS\r\n // ============================================================================\r\n private readonly loadingActive = select(UsersGroupsState.getLoadingActive);\r\n\r\n // ============================================================================\r\n // Loading Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly isLoadingUsers = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.GetUsers),\r\n );\r\n readonly isLoadingUser = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.GetUser),\r\n );\r\n readonly isSavingUser = computed(\r\n () =>\r\n this.loadingActive().includes(UsersGroupsActionKey.CreateUser) ||\r\n this.loadingActive().includes(UsersGroupsActionKey.UpdateUser),\r\n );\r\n readonly isDeletingUser = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.DeleteUser),\r\n );\r\n\r\n readonly isLoadingGroups = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.GetGroups),\r\n );\r\n readonly isLoadingGroup = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.GetGroup),\r\n );\r\n readonly isSavingGroup = computed(\r\n () =>\r\n this.loadingActive().includes(UsersGroupsActionKey.CreateGroup) ||\r\n this.loadingActive().includes(UsersGroupsActionKey.UpdateGroup),\r\n );\r\n readonly isDeletingGroup = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.DeleteGroup),\r\n );\r\n\r\n readonly isAddingUserToGroup = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.AddUserToGroup),\r\n );\r\n readonly isDeletingUserFromGroup = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.DeleteUserFromGroup),\r\n );\r\n\r\n // ============================================================================\r\n // Action Dispatchers\r\n // ============================================================================\r\n getUsers() {\r\n return this.store.dispatch(new GetUsers());\r\n }\r\n\r\n getUser(id: string | null) {\r\n return this.store.dispatch(new GetUser(id));\r\n }\r\n\r\n createUser(payload: Partial<User>) {\r\n return this.store.dispatch(new CreateUser(payload));\r\n }\r\n\r\n addUserToGroup(id: string, groupId: string) {\r\n return this.store.dispatch(new AddUserToGroup({ id, groupId }));\r\n }\r\n\r\n deleteUserFromGroup(payload: any) {\r\n return this.store.dispatch(new DeleteUserFromGroup(payload));\r\n }\r\n\r\n updateUser(id: string | undefined, changes: Partial<User>) {\r\n return this.store.dispatch(new UpdateUser(id, changes));\r\n }\r\n\r\n deleteUser(userName: string | number) {\r\n return this.store.dispatch(new DeleteUser(userName));\r\n }\r\n\r\n getGroups() {\r\n return this.store.dispatch(new GetGroups());\r\n }\r\n\r\n getGroup(id: string | number | null) {\r\n return this.store.dispatch(new GetGroup(id));\r\n }\r\n\r\n createGroup(payload: Partial<Group>) {\r\n return this.store.dispatch(new CreateGroup(payload));\r\n }\r\n\r\n updateGroup(id: string | number | undefined, changes: Partial<Group>) {\r\n return this.store.dispatch(new UpdateGroup(id, changes));\r\n }\r\n\r\n deleteGroup(groupId: string | number) {\r\n return this.store.dispatch(new DeleteGroup(groupId));\r\n }\r\n\r\n clearSelectedGroup() {\r\n this.store.dispatch(new ClearSelectedGroup());\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, inject, OnInit, signal } from '@angular/core';\r\nimport { Breadcrumb } from '@masterteam/components/breadcrumb';\r\nimport { UsersGroupsFacade } from '../../store/users-groups';\r\nimport { ActivatedRoute, Router, RouterOutlet } from '@angular/router';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Page } from '@masterteam/components/page';\r\nimport { PageHeaderTab } from '@masterteam/components/page-header';\r\nimport { Button } from '@masterteam/components/button';\r\n\r\n@Component({\r\n selector: 'mt-users-groups',\r\n styleUrl: './users-groups.css',\r\n templateUrl: './users-groups.html',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Page,\r\n Breadcrumb,\r\n RouterOutlet,\r\n TranslocoDirective,\r\n Button,\r\n ],\r\n})\r\nexport default class UsersGroups implements OnInit {\r\n protected readonly facade = inject(UsersGroupsFacade);\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly router = inject(Router);\r\n protected readonly translocoService = inject(TranslocoService);\r\n selectedTab = signal<string>('users');\r\n\r\n tabsList: PageHeaderTab[] = [\r\n {\r\n label: this.translocoService.translate('users-groups.users'),\r\n value: 'users',\r\n },\r\n {\r\n label: this.translocoService.translate('users-groups.groups'),\r\n value: 'groups',\r\n },\r\n ];\r\n breadcrumbItems: { label?: string; routerLink?: string; icon?: string }[] = [\r\n {\r\n label: '',\r\n icon: 'general.home-line',\r\n routerLink: '/control-panel/workspaces',\r\n },\r\n {\r\n label: this.translocoService.translate(\r\n 'product-settings.product-settings',\r\n ),\r\n routerLink: '/control-panel/product-settings',\r\n },\r\n { label: this.translocoService.translate('users-groups.users-groups') },\r\n ];\r\n\r\n ngOnInit() {\r\n const selectedTab = this.route.snapshot.firstChild?.data['componentType'];\r\n this.selectedTab.set(selectedTab || 'users');\r\n this.facade.getUsers();\r\n }\r\n\r\n goBack() {\r\n this.router.navigate(['control-panel/product-settings']);\r\n }\r\n\r\n onTabChange(event: any) {\r\n this.selectedTab.set(event);\r\n if (event == 'users') {\r\n this.router.navigate(['users'], { relativeTo: this.route });\r\n } else if (event == 'groups') {\r\n this.router.navigate(['groups'], { relativeTo: this.route });\r\n }\r\n }\r\n\r\n getUsers() {\r\n this.facade.getUsers();\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <mt-page\r\n [title]=\"t('users-groups')\"\r\n [avatarIcon]=\"'user.user-circle'\"\r\n [avatarStyle]=\"{\r\n '--p-avatar-background': 'var(--p-sky-100)',\r\n '--p-avatar-color': 'var(--p-sky-700)',\r\n }\"\r\n [tabs]=\"tabsList\"\r\n [activeTab]=\"selectedTab()\"\r\n (tabChange)=\"onTabChange($event)\"\r\n (backButtonClick)=\"goBack()\"\r\n backButton\r\n >\r\n <div class=\"flex justify-between items-end\">\r\n <div>\r\n <h3 class=\"font-bold text-lg\">{{ t(\"users-groups\") }}</h3>\r\n <mt-breadcrumb\r\n [items]=\"breadcrumbItems\"\r\n [styleClass]=\"'flex justify-start mx-1'\"\r\n ></mt-breadcrumb>\r\n </div>\r\n @if (selectedTab() === \"users\") {\r\n <mt-button\r\n [icon]=\"'arrow.refresh-cw-02'\"\r\n [label]=\"\r\n translocoService.translate('users-groups.sync-users-information')\r\n \"\r\n [severity]=\"'primary'\"\r\n [variant]=\"'outlined'\"\r\n [size]=\"'small'\"\r\n (click)=\"getUsers()\"\r\n class=\"mx-4\"\r\n >\r\n </mt-button>\r\n }\r\n </div>\r\n <router-outlet />\r\n </mt-page>\r\n</ng-container>\r\n","import {\r\n Component,\r\n inject,\r\n OnInit,\r\n signal,\r\n effect,\r\n input,\r\n computed,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\n// Masterteam dialog\r\nimport { DialogService, ModalRef } from '@masterteam/components/dialog';\r\nimport { DynamicFormConfig, ValidatorConfig } from '@masterteam/components';\r\nimport { User, UsersGroupsFacade } from '../../../../../store/users-groups';\r\nimport { UserSearchFieldConfig } from '@masterteam/components';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport {\r\n TranslocoDirective,\r\n TranslocoPipe,\r\n TranslocoService,\r\n} from '@jsverse/transloco';\r\nimport { HttpContext } from '@angular/common/http';\r\nimport { REQUEST_CONTEXT } from '@masterteam/components';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { UploadFileFieldConfig } from '@masterteam/components';\r\n\r\n@Component({\r\n selector: 'mt-user-form',\r\n templateUrl: './user-form.html',\r\n styleUrls: ['./user-form.css'],\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Button,\r\n TranslocoDirective,\r\n SkeletonModule,\r\n DynamicForm,\r\n ReactiveFormsModule,\r\n Tabs,\r\n TranslocoPipe,\r\n ],\r\n providers: [DialogService],\r\n})\r\nexport default class UserForm implements OnInit {\r\n modal = inject(ModalService);\r\n ref: ModalRef = inject(ModalRef);\r\n userForEdit = input<User | null>(null);\r\n selectedTab = signal<string>('internal');\r\n private readonly translocoService = inject(TranslocoService);\r\n tabsList = [\r\n {\r\n label: this.translocoService.translate('users-groups.internal'),\r\n value: 'internal',\r\n },\r\n {\r\n label: this.translocoService.translate('users-groups.external'),\r\n value: 'external',\r\n },\r\n ];\r\n private readonly facade = inject(UsersGroupsFacade);\r\n selectedUser = this.facade.selectedUser;\r\n internalUserFormControl = new FormControl();\r\n externalUserFormControl = new FormControl();\r\n getUserFormLoading = this.facade.isLoadingUser;\r\n createUpdateUserLoading = this.facade.isSavingUser;\r\n context = new HttpContext().set(REQUEST_CONTEXT, {\r\n useBaseUrl: true,\r\n });\r\n internalUserFormConfig = signal<DynamicFormConfig>({\r\n sections: [\r\n {\r\n key: 'internalUserFormConfig',\r\n type: 'header',\r\n order: 1,\r\n fields: [\r\n new UserSearchFieldConfig({\r\n key: 'userField',\r\n label: this.translocoService.translate('users-groups.user-name'),\r\n apiUrl: 'Identity/users/external/ad',\r\n context: this.context,\r\n validators: [ValidatorConfig.required()],\r\n order: 1,\r\n }),\r\n ],\r\n },\r\n ],\r\n });\r\n\r\n fieldColSpan = computed(() => (this.userForEdit()?.userName ? 12 : 6));\r\n externalUserFormConfig = computed<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'externalUserFormConfig',\r\n type: 'header',\r\n order: 1,\r\n fields: [\r\n new UploadFileFieldConfig({\r\n key: 'image',\r\n label: 'Avatar',\r\n shape: 'circle',\r\n endPoint: 'avatar',\r\n context: this.context,\r\n colSpan: 12,\r\n order: 1,\r\n }),\r\n {\r\n key: 'displayName',\r\n label: this.translocoService.translate('users-groups.display-name'),\r\n placeholder: this.translocoService.translate(\r\n 'users-groups.display-name',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n colSpan: this.fieldColSpan(),\r\n order: 2,\r\n },\r\n {\r\n key: 'email',\r\n label: this.translocoService.translate('users-groups.email'),\r\n placeholder: this.translocoService.translate('users-groups.email'),\r\n inputType: 'email',\r\n required: true,\r\n validators: [\r\n ValidatorConfig.required('Email is required'),\r\n ValidatorConfig.email('Please enter a valid email address'),\r\n ],\r\n colSpan: this.fieldColSpan(),\r\n order: 4,\r\n },\r\n {\r\n key: 'mobile',\r\n label: this.translocoService.translate('users-groups.mobile'),\r\n placeholder: this.translocoService.translate('users-groups.mobile'),\r\n validators: [ValidatorConfig.required()],\r\n colSpan: this.fieldColSpan(),\r\n order: 5,\r\n },\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n effect(() => {\r\n const userName = this.userForEdit()?.userName;\r\n if (this.selectedUser() && userName) {\r\n this.selectedTab.set('external');\r\n const data = {\r\n ...this.selectedUser(),\r\n image: this.selectedUser()?.photo,\r\n };\r\n this.externalUserFormControl.patchValue(data);\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.userForEdit()?.userName) {\r\n this.facade.getUser(this.userForEdit()?.userName || null);\r\n }\r\n this.updateFormFields();\r\n }\r\n\r\n onSubmit() {\r\n if (this.userForEdit()?.userName) {\r\n const payload = {\r\n displayName: this.externalUserFormControl.value?.displayName,\r\n email: this.externalUserFormControl.value?.email,\r\n mobile: this.externalUserFormControl.value?.mobile,\r\n image: this.externalUserFormControl.value?.image?.fileName,\r\n };\r\n this.facade.updateUser(this.userForEdit()?.id, payload).subscribe({\r\n next: () => {\r\n this.ref.close(true);\r\n },\r\n error: () => {},\r\n });\r\n } else {\r\n let payload: Partial<User> = {};\r\n if (this.selectedTab() === 'internal') {\r\n payload = {\r\n userName: this.internalUserFormControl.value?.userField?.userName,\r\n isExternal: false,\r\n };\r\n } else {\r\n payload = {\r\n id: '',\r\n userName: this.externalUserFormControl.value?.userName,\r\n displayName: this.externalUserFormControl.value?.displayName,\r\n email: this.externalUserFormControl.value?.email,\r\n mobile: this.externalUserFormControl.value?.mobile,\r\n password: this.externalUserFormControl.value?.password,\r\n isExternal: true,\r\n image: this.externalUserFormControl.value?.image?.fileName,\r\n };\r\n }\r\n\r\n this.facade.createUser(payload).subscribe({\r\n next: () => {\r\n this.ref.close(true);\r\n },\r\n error: () => {},\r\n });\r\n }\r\n }\r\n\r\n updateFormFields() {\r\n if (!this.userForEdit()?.userName) {\r\n this.externalUserFormConfig().sections[0].fields.push(\r\n {\r\n key: 'userName',\r\n label: this.translocoService.translate('users-groups.user-name'),\r\n placeholder: this.translocoService.translate(\r\n 'users-groups.user-name',\r\n ),\r\n validators: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.pattern('^[a-zA-Z0-9]+$'),\r\n ],\r\n colSpan: 6,\r\n order: 3,\r\n hidden: !!this.userForEdit()?.userName,\r\n },\r\n {\r\n key: 'password',\r\n label: this.translocoService.translate('users-groups.password'),\r\n placeholder: this.translocoService.translate('users-groups.password'),\r\n validators: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.pattern(\r\n '^(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).+$',\r\n \"Passwords must have at least one non alphanumeric character.\\nPasswords must have at least one uppercase ('A'-'Z').\",\r\n ),\r\n ],\r\n inputType: 'password',\r\n colSpan: 6,\r\n order: 6,\r\n hidden: !!this.userForEdit()?.userName,\r\n },\r\n {\r\n key: 'confirmPassword',\r\n label: this.translocoService.translate(\r\n 'users-groups.confirm-password',\r\n ),\r\n placeholder: this.translocoService.translate(\r\n 'users-groups.confirm-password',\r\n ),\r\n validators: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.pattern(\r\n '^(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).+$',\r\n \"Passwords must have at least one non alphanumeric character.\\nPasswords must have at least one uppercase ('A'-'Z').\",\r\n ),\r\n ],\r\n inputType: 'password',\r\n colSpan: 6,\r\n order: 6,\r\n hidden: !!this.userForEdit()?.userName,\r\n },\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport function passwordMatchValidator(\r\n passwordControlName: string,\r\n confirmPasswordControlName: string,\r\n): ValidatorFn {\r\n return (group: AbstractControl): ValidationErrors | null => {\r\n // 1. Get the controls from the group\r\n const passwordControl = group.get(passwordControlName);\r\n const confirmPasswordControl = group.get(confirmPasswordControlName);\r\n\r\n // 2. Basic checks (if controls don't exist, or if one is null, it's not a mismatch error)\r\n if (!passwordControl || !confirmPasswordControl) {\r\n return null;\r\n }\r\n\r\n // 3. Check for value mismatch\r\n if (passwordControl.value !== confirmPasswordControl.value) {\r\n // 4. Set the error on the 'confirm password' control for clearer user feedback\r\n confirmPasswordControl.setErrors({ mismatch: true });\r\n return { mismatch: true }; // The group itself has a mismatch error\r\n } else {\r\n // 5. If they match, clear any previous mismatch error on the 'confirm password' control\r\n if (confirmPasswordControl.hasError('mismatch')) {\r\n const errors = confirmPasswordControl.errors;\r\n if (errors) {\r\n delete errors['mismatch'];\r\n confirmPasswordControl.setErrors(\r\n Object.keys(errors).length > 0 ? errors : null,\r\n );\r\n }\r\n }\r\n return null; // No mismatch error\r\n }\r\n };\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div [class]=\"'flex flex-col gap-1 p-4 ' + modal.contentClass\">\r\n @if (!getUserFormLoading()) {\r\n <div class=\"flex justify-center\">\r\n <div class=\"w-60\">\r\n <mt-tabs\r\n [(active)]=\"selectedTab\"\r\n [options]=\"tabsList\"\r\n fluid\r\n size=\"small\"\r\n [disabled]=\"!!this.userForEdit()?.userName\"\r\n ></mt-tabs>\r\n </div>\r\n </div>\r\n\r\n <form class=\"col-span-1\">\r\n @if (selectedTab() === \"internal\") {\r\n <mt-dynamic-form\r\n [formConfig]=\"internalUserFormConfig()\"\r\n [formControl]=\"internalUserFormControl\"\r\n />\r\n } @else {\r\n <mt-dynamic-form\r\n [formConfig]=\"externalUserFormConfig()\"\r\n [formControl]=\"externalUserFormControl\"\r\n />\r\n }\r\n </form>\r\n } @else {\r\n <p-skeleton class=\"my-4 mt-7\" height=\"3rem\" />\r\n <p-skeleton class=\"my-4\" height=\"3rem\" />\r\n <p-skeleton class=\"my-4\" height=\"3rem\" />\r\n }\r\n </div>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"selectedUser() ? ('save' | transloco) : ('add' | transloco)\"\r\n (click)=\"onSubmit()\"\r\n [loading]=\"createUpdateUserLoading()\"\r\n [disabled]=\"\r\n selectedTab() === 'internal'\r\n ? !this.internalUserFormControl.valid\r\n : !this.externalUserFormControl.valid\r\n \"\r\n />\r\n </div>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n computed,\r\n inject,\r\n linkedSignal,\r\n OnInit,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ColumnDef, Table, TableAction } from '@masterteam/components/table';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { UsersGroupsFacade } from '../../../../store/users-groups';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport UserForm from './user-form/user-form';\r\nimport { finalize } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'mt-users',\r\n styleUrl: './users.css',\r\n templateUrl: './users.html',\r\n standalone: true,\r\n imports: [CommonModule, SkeletonModule, Table, Avatar, TranslocoDirective],\r\n})\r\nexport default class Users implements OnInit {\r\n typeCol = viewChild.required<TemplateRef<any>>('typeCol');\r\n userCol = viewChild.required<TemplateRef<any>>('userCol');\r\n\r\n private readonly facade = inject(UsersGroupsFacade);\r\n readonly modal: ModalService = inject(ModalService);\r\n private readonly translocoService = inject(TranslocoService);\r\n\r\n users = computed(() => {\r\n const tab = this.activeTab();\r\n const all = this.allUsers();\r\n\r\n switch (tab) {\r\n case 'internal':\r\n return all.filter((user) => !user.isExternal);\r\n case 'external':\r\n return all.filter((user) => user.isExternal);\r\n case 'all':\r\n default:\r\n return all;\r\n }\r\n });\r\n\r\n tabs = signal([\r\n {\r\n label: this.translocoService.translate('users-groups.all'),\r\n value: 'all',\r\n },\r\n {\r\n label: this.translocoService.translate('users-groups.internal'),\r\n value: 'internal',\r\n },\r\n {\r\n label: this.translocoService.translate('users-groups.external'),\r\n value: 'external',\r\n },\r\n ]);\r\n activeTab = signal<string>('all');\r\n tableActions = signal<TableAction[]>([\r\n {\r\n icon: 'general.plus',\r\n label: this.translocoService.translate('users-groups.add-user'),\r\n color: 'primary',\r\n action: () => {\r\n this.addUserDialog();\r\n },\r\n },\r\n ]);\r\n\r\n deletingRowIds = signal<any[]>([]);\r\n rowActions = signal<TableAction[]>([\r\n {\r\n icon: 'custom.pencil',\r\n tooltip: this.translocoService.translate('edit'),\r\n color: 'primary',\r\n action: (row: any) => {\r\n this.addUserDialog(row);\r\n },\r\n hidden: (row: any) => !row.isExternal,\r\n },\r\n {\r\n icon: 'general.trash-01',\r\n tooltip: this.translocoService.translate('delete'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row: any) => {\r\n this.deletingRowIds.update((ids) => [...ids, row.userName]);\r\n this.facade\r\n .deleteUser(row.userName)\r\n .pipe(\r\n finalize(() => {\r\n this.deletingRowIds.update((ids) =>\r\n ids.filter((id) => id !== row.userName),\r\n );\r\n }),\r\n )\r\n .subscribe();\r\n },\r\n confirmation: {\r\n type: 'popup',\r\n confirmationType: 'delete',\r\n },\r\n loading: (row: any) => this.deletingRowIds().includes(row.userName),\r\n },\r\n ]);\r\n\r\n tableColumns = linkedSignal<ColumnDef[]>(() => [\r\n {\r\n key: 'displayName',\r\n label: this.translocoService.translate('users-groups.user'),\r\n type: 'custom',\r\n customCellTpl: this.userCol(),\r\n filterConfig: {\r\n type: 'text',\r\n label: this.translocoService.translate('users-groups.user'),\r\n },\r\n },\r\n {\r\n key: 'isExternal',\r\n label: this.translocoService.translate('users-groups.type'),\r\n type: 'custom',\r\n customCellTpl: this.typeCol(),\r\n },\r\n {\r\n key: 'email',\r\n label: this.translocoService.translate('users-groups.email'),\r\n filterConfig: {\r\n type: 'text',\r\n label: this.translocoService.translate('users-groups.email'),\r\n },\r\n },\r\n {\r\n key: 'lastLoginTime.displayValue',\r\n label: this.translocoService.translate('users-groups.last-seen'),\r\n },\r\n ]);\r\n\r\n loading = this.facade.isLoadingUsers;\r\n private allUsers = this.facade.users;\r\n\r\n ngOnInit(): void {\r\n this.facade.getUsers();\r\n }\r\n\r\n addUserDialog(user: any | null = null) {\r\n const modalType: 'drawer' | 'dialog' = user ? 'drawer' : 'dialog';\r\n this.modal.openModal(UserForm, modalType, {\r\n header: user\r\n ? this.translocoService.translate('users-groups.edit-user')\r\n : this.translocoService.translate('users-groups.add-user'),\r\n styleClass:\r\n modalType === 'drawer'\r\n ? '!w-[30rem] !absolute !shadow-none'\r\n : '!w-[50rem]',\r\n position: modalType === 'drawer' ? 'end' : '',\r\n appendTo: modalType === 'drawer' ? 'page-content' : 'body',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: {\r\n userForEdit: user,\r\n },\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div class=\"mt-5\">\r\n <ng-template #typeCol let-row>\r\n <div>{{ row.isExternal ? t(\"external\") : t(\"internal\") }}</div>\r\n </ng-template>\r\n <ng-template #userCol let-row>\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar [icon]=\"'custom.user-pp'\"> </mt-avatar> {{ row.displayName }}\r\n </div>\r\n </ng-template>\r\n\r\n <mt-table\r\n [tabs]=\"tabs()\"\r\n [(activeTab)]=\"activeTab\"\r\n [data]=\"users()\"\r\n [columns]=\"tableColumns()\"\r\n [actions]=\"tableActions()\"\r\n [rowActions]=\"rowActions()\"\r\n [generalSearch]=\"true\"\r\n [showFilters]=\"true\"\r\n [loading]=\"loading()\"\r\n >\r\n </mt-table>\r\n </div>\r\n</ng-container>\r\n","import {\r\n Component,\r\n inject,\r\n OnInit,\r\n signal,\r\n input,\r\n TemplateRef,\r\n viewChild,\r\n linkedSignal,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { DialogService, ModalRef } from '@masterteam/components/dialog';\r\nimport {\r\n DynamicFormConfig,\r\n TextareaFieldConfig,\r\n UserSearchFieldConfig,\r\n ValidatorConfig,\r\n} from '@masterteam/components';\r\nimport { Group, UsersGroupsFacade } from '../../../../../store/users-groups';\r\nimport {\r\n TranslocoDirective,\r\n TranslocoPipe,\r\n TranslocoService,\r\n} from '@jsverse/transloco';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { REQUEST_CONTEXT } from '@masterteam/components';\r\nimport { HttpContext } from '@angular/common/http';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { ColumnDef, Table, TableAction } from '@masterteam/components/table';\r\nimport { finalize } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'mt-group-form',\r\n templateUrl: './group-form.html',\r\n styleUrls: ['./group-form.css'],\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Button,\r\n TranslocoDirective,\r\n SkeletonModule,\r\n DynamicForm,\r\n ReactiveFormsModule,\r\n TranslocoPipe,\r\n Avatar,\r\n Table,\r\n ],\r\n providers: [DialogService],\r\n})\r\nexport default class GroupForm implements OnInit {\r\n modal = inject(ModalService);\r\n ref: ModalRef = inject(ModalRef);\r\n groupForEdit = input<Group | null>(null);\r\n private readonly translocoService = inject(TranslocoService);\r\n private readonly facade = inject(UsersGroupsFacade);\r\n selectedGroup = this.facade.selectedGroup;\r\n groupFormControl = new FormControl();\r\n getGroupFormLoading = this.facade.isLoadingGroup;\r\n createUpdateGroupLoading = this.facade.isSavingGroup;\r\n addUserToGroupLoading = this.facade.isAddingUserToGroup;\r\n deleteUserFromGroupLoading = this.facade.isDeletingUserFromGroup;\r\n internalUserFormControl = new FormControl();\r\n userCol = viewChild.required<TemplateRef<any>>('userCol');\r\n isUserExistInMembers = signal<boolean>(false);\r\n context = new HttpContext().set(REQUEST_CONTEXT, {\r\n useBaseUrl: false,\r\n });\r\n groupFormConfig = signal<DynamicFormConfig>({\r\n sections: [\r\n {\r\n key: 'groupFormConfig',\r\n type: 'header',\r\n order: 1,\r\n fields: [\r\n {\r\n key: 'name.en',\r\n label: this.translocoService.translate(\r\n 'users-groups.group-name-en',\r\n ),\r\n placeholder: this.translocoService.translate(\r\n 'users-groups.group-name-en',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n order: 1,\r\n },\r\n {\r\n key: 'name.ar',\r\n label: this.translocoService.translate(\r\n 'users-groups.group-name-ar',\r\n ),\r\n placeholder: this.translocoService.translate(\r\n 'users-groups.group-name-ar',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n order: 1,\r\n },\r\n\r\n new TextareaFieldConfig({\r\n key: 'description',\r\n label: this.translocoService.translate('users-groups.description'),\r\n placeholder: this.translocoService.translate(\r\n 'users-groups.description',\r\n ),\r\n order: 3,\r\n }),\r\n ],\r\n },\r\n ],\r\n });\r\n\r\n usersLoading = signal<boolean>(false);\r\n internalUserFormConfig = signal<DynamicFormConfig>({\r\n sections: [\r\n {\r\n key: 'internalUserFormConfig',\r\n type: 'header',\r\n order: 1,\r\n fields: [\r\n new UserSearchFieldConfig({\r\n key: 'userField',\r\n label: this.translocoService.translate('users-groups.user-name'),\r\n apiUrl: 'identity/users',\r\n context: this.context,\r\n order: 1,\r\n }),\r\n ],\r\n },\r\n ],\r\n });\r\n tableColumns = linkedSignal<ColumnDef[]>(() => [\r\n {\r\n key: 'displayName',\r\n label: this.translocoService.translate('users-groups.user'),\r\n type: 'custom',\r\n customCellTpl: this.userCol(),\r\n },\r\n ]);\r\n\r\n deletingRowIds = signal<any[]>([]);\r\n rowActions = signal<TableAction[]>([\r\n {\r\n icon: 'general.trash-01',\r\n tooltip: this.translocoService.translate('delete'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row: any) => {\r\n this.deletingRowIds.update((ids) => [...ids, row?.userName]);\r\n this.facade\r\n .deleteUserFromGroup({\r\n userName: row?.userName,\r\n groupId: this.groupForEdit()?.id as string,\r\n })\r\n .pipe(\r\n finalize(() => {\r\n this.deletingRowIds.update((ids) =>\r\n ids.filter((id) => id !== row?.userName),\r\n );\r\n }),\r\n )\r\n .subscribe();\r\n },\r\n confirmation: {\r\n type: 'popup',\r\n confirmationType: 'delete',\r\n },\r\n loading: (row: any) =>\r\n this.deletingRowIds().includes(row?.userName),\r\n },\r\n ]);\r\n constructor() {\r\n // effect(() => {\r\n // const groupId = this.groupForEdit()?.id;\r\n // if (this.selectedGroup() && groupId) {\r\n // this.groupFormControl.patchValue(this.selectedGroup());\r\n // }\r\n // });\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.groupForEdit()?.id) {\r\n this.facade.getGroup(this.groupForEdit()?.id || null).subscribe((_) => {\r\n if (this.selectedGroup()) {\r\n this.groupFormControl.patchValue(this.selectedGroup());\r\n }\r\n });\r\n }\r\n\r\n this.internalUserFormControl.valueChanges.subscribe((value) => {\r\n const isUserExistInMembers = this.selectedGroup()?.members?.find(\r\n (member) => member?.user?.id === value?.userField?.id,\r\n );\r\n this.isUserExistInMembers.set(isUserExistInMembers);\r\n });\r\n }\r\n\r\n onSubmit() {\r\n if (this.groupForEdit()?.id) {\r\n const payload = {\r\n name: this.groupFormControl.value?.name,\r\n workspace: this.groupFormControl.value?.workspace,\r\n description: this.groupFormControl.value?.description,\r\n };\r\n this.facade.updateGroup(this.groupForEdit()?.id, payload).subscribe({\r\n next: () => {\r\n this.ref.close(true);\r\n },\r\n error: () => {},\r\n });\r\n } else {\r\n const payload: Partial<Group> = {\r\n name: this.groupFormControl.value?.name,\r\n workspace: this.groupFormControl.value?.workspace,\r\n description: this.groupFormControl.value?.description,\r\n };\r\n\r\n this.facade.createGroup(payload).subscribe({\r\n next: () => {\r\n this.ref.close(true);\r\n },\r\n error: () => {},\r\n });\r\n }\r\n }\r\n\r\n onAddUser() {\r\n\r\n if (\r\n this.internalUserFormControl.value.userField.id &&\r\n !this.isUserExistInMembers()\r\n ) {\r\n this.facade\r\n .addUserToGroup(\r\n this.internalUserFormControl.value.userField.userName,\r\n this.groupForEdit()?.id as string,\r\n )\r\n .subscribe((_) => {\r\n this.internalUserFormControl.setValue({ userField: null });\r\n });\r\n }\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div [class]=\"'flex flex-col gap-1 p-4 ' + modal.contentClass\">\r\n @if (!getGroupFormLoading()) {\r\n <form class=\"col-span-1\">\r\n <mt-dynamic-form\r\n [formConfig]=\"groupFormConfig()\"\r\n [formControl]=\"groupFormControl\"\r\n />\r\n </form>\r\n\r\n @if (groupForEdit()) {\r\n <div class=\"flex gap-3 items-end mt-6 pt-4 border-t-1 border-surface\">\r\n <mt-dynamic-form\r\n class=\"flex-1\"\r\n [formConfig]=\"internalUserFormConfig()\"\r\n [formControl]=\"internalUserFormControl\"\r\n />\r\n <mt-button\r\n icon=\"general.plus\"\r\n class=\"mb-0\"\r\n variant=\"outlined\"\r\n (click)=\"onAddUser()\"\r\n [disabled]=\"\r\n addUserToGroupLoading() ||\r\n isUserExistInMembers() ||\r\n !internalUserFormControl.value?.userField\r\n \"\r\n />\r\n </div>\r\n\r\n <mt-table\r\n [data]=\"selectedGroup()?.members || []\"\r\n [columns]=\"tableColumns()\"\r\n [rowActions]=\"rowActions()\"\r\n [generalSearch]=\"false\"\r\n [showFilters]=\"false\"\r\n [loading]=\"addUserToGroupLoading()\"\r\n >\r\n </mt-table>\r\n <ng-template #userCol let-row>\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar [icon]=\"'custom.user-pp'\"> </mt-avatar>\r\n {{ row?.displayName }}\r\n </div>\r\n </ng-template>\r\n }\r\n } @else {\r\n <p-skeleton class=\"my-4 mt-7\" height=\"3rem\" />\r\n <p-skeleton class=\"my-4\" height=\"3rem\" />\r\n <p-skeleton class=\"my-4\" height=\"3rem\" />\r\n }\r\n </div>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"selectedGroup() ? ('save' | transloco) : ('add' | transloco)\"\r\n (click)=\"onSubmit()\"\r\n [loading]=\"createUpdateGroupLoading()\"\r\n [disabled]=\"!this.groupFormControl.valid\"\r\n />\r\n </div>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n inject,\r\n linkedSignal,\r\n OnInit,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ColumnDef, Table, TableAction } from '@masterteam/components/table';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport GroupForm from './group-form/group-form';\r\nimport { UsersGroupsFacade } from '../../../../store/users-groups';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { finalize } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'mt-groups',\r\n styleUrl: './groups.css',\r\n templateUrl: './groups.html',\r\n standalone: true,\r\n imports: [CommonModule, SkeletonModule, Table, TranslocoDirective],\r\n})\r\nexport default class Groups implements OnInit {\r\n workspaceCol = viewChild.required<TemplateRef<any>>('workspaceCol');\r\n groupCol = viewChild.required<TemplateRef<any>>('groupCol');\r\n\r\n private readonly facade = inject(UsersGroupsFacade);\r\n readonly modal: ModalService = inject(ModalService);\r\n private readonly translocoService = inject(TranslocoService);\r\n\r\n activeTab = signal<string>('all');\r\n tableActions = signal<TableAction[]>([\r\n {\r\n icon: 'general.plus',\r\n label: this.translocoService.translate('users-groups.add-group'),\r\n color: 'primary',\r\n action: () => {\r\n this.addGroupDialog();\r\n },\r\n },\r\n ]);\r\n\r\n deletingRowIds = signal<any[]>([]);\r\n rowActions = signal<TableAction[]>([\r\n {\r\n icon: 'custom.pencil',\r\n tooltip: this.translocoService.translate('edit'),\r\n color: 'primary',\r\n action: (row: any) => {\r\n this.facade.clearSelectedGroup();\r\n this.addGroupDialog(row);\r\n },\r\n },\r\n {\r\n icon: 'general.trash-01',\r\n tooltip: this.translocoService.translate('delete'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row: any) => {\r\n this.deletingRowIds.update((ids) => [...ids, row.id]);\r\n this.facade\r\n .deleteGroup(row.id)\r\n .pipe(\r\n finalize(() => {\r\n this.deletingRowIds.update((ids) =>\r\n ids.filter((id) => id !== row.id),\r\n );\r\n }),\r\n )\r\n .subscribe();\r\n },\r\n confirmation: {\r\n type: 'popup',\r\n confirmationType: 'delete',\r\n },\r\n loading: (row: any) => this.deletingRowIds().includes(row.id),\r\n },\r\n ]);\r\n\r\n tableColumns = linkedSignal<ColumnDef[]>(() => [\r\n {\r\n key: 'name',\r\n label: this.translocoService.translate('users-groups.group'),\r\n type: 'custom',\r\n customCellTpl: this.groupCol(),\r\n filterConfig: {\r\n type: 'text',\r\n label: this.translocoService.translate('users-groups.group'),\r\n },\r\n },\r\n {\r\n key: 'membersCount',\r\n label: this.translocoService.translate('users-groups.users'),\r\n },\r\n ]);\r\n\r\n loading = this.facade.isLoadingGroups;\r\n allGroups = this.facade.groups;\r\n\r\n ngOnInit(): void {\r\n this.facade.getGroups();\r\n }\r\n\r\n addGroupDialog(group: any | null = null) {\r\n const modalType: 'drawer' | 'dialog' = group ? 'drawer' : 'dialog';\r\n this.modal.openModal(GroupForm, modalType, {\r\n header: group\r\n ? this.translocoService.translate('users-groups.edit-group')\r\n : this.translocoService.translate('users-groups.add-group'),\r\n styleClass: '!w-[35rem] !absolute !shadow-none',\r\n position: modalType === 'drawer' ? 'end' : '',\r\n appendTo: modalType === 'drawer' ? 'page-content' : 'body',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: {\r\n groupForEdit: group,\r\n },\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div class=\"mt-5\">\r\n <ng-template #workspaceCol let-row>\r\n <div>{{ row.workspace }}</div>\r\n </ng-template>\r\n <ng-template #groupCol let-row>\r\n <div class=\"flex items-center gap-2\">\r\n {{\r\n row.name?.display\r\n }}\r\n </div>\r\n </ng-template>\r\n\r\n <mt-table [(activeTab)]=\"activeTab\" [data]=\"allGroups()\" [columns]=\"tableColumns()\" [actions]=\"tableActions()\"\r\n [rowActions]=\"rowActions()\" [generalSearch]=\"true\" [showFilters]=\"true\" [loading]=\"loading()\">\r\n </mt-table>\r\n </div>\r\n</ng-container>\r\n","// store/index.ts\r\nexport * from './users-groups';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@masterteam/users-groups",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"directory": "../../../dist/masterteam/users-groups",
|
|
6
6
|
"linkDirectory": false,
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
"tailwindcss": "^4.1.17",
|
|
21
21
|
"tailwindcss-primeui": "^0.6.1",
|
|
22
22
|
"@ngxs/store": "^20.1.0",
|
|
23
|
-
"@masterteam/
|
|
24
|
-
"@masterteam/
|
|
25
|
-
"@masterteam/
|
|
23
|
+
"@masterteam/icons": "^0.0.13",
|
|
24
|
+
"@masterteam/components": "^0.0.87",
|
|
25
|
+
"@masterteam/forms": "^0.0.35"
|
|
26
26
|
},
|
|
27
27
|
"sideEffects": false,
|
|
28
28
|
"exports": {
|
|
@@ -20,7 +20,7 @@ interface LoadingStateShape<L extends string = string> {
|
|
|
20
20
|
|
|
21
21
|
interface User {
|
|
22
22
|
displayName: string;
|
|
23
|
-
|
|
23
|
+
id: string;
|
|
24
24
|
userName: string;
|
|
25
25
|
photo?: any;
|
|
26
26
|
password?: string;
|
|
@@ -34,12 +34,23 @@ interface User {
|
|
|
34
34
|
}
|
|
35
35
|
interface Group {
|
|
36
36
|
id?: string | number;
|
|
37
|
-
name?:
|
|
38
|
-
|
|
37
|
+
name?: TranslatedField | string;
|
|
38
|
+
description?: TranslatedField | string;
|
|
39
|
+
createdAt?: ApiDateValue;
|
|
39
40
|
workspace?: any;
|
|
40
|
-
description?: string;
|
|
41
41
|
members?: any[];
|
|
42
42
|
membersCount?: number;
|
|
43
|
+
isActivated?: boolean;
|
|
44
|
+
applicationId?: number;
|
|
45
|
+
}
|
|
46
|
+
interface TranslatedField {
|
|
47
|
+
display?: string;
|
|
48
|
+
en?: string;
|
|
49
|
+
ar?: string;
|
|
50
|
+
}
|
|
51
|
+
interface ApiDateValue {
|
|
52
|
+
displayValue?: string;
|
|
53
|
+
rawValue?: string;
|
|
43
54
|
}
|
|
44
55
|
declare enum UsersGroupsActionKey {
|
|
45
56
|
GetUsers = "getUsers",
|
|
@@ -78,19 +89,19 @@ declare class CreateUser {
|
|
|
78
89
|
declare class AddUserToGroup {
|
|
79
90
|
payload: {
|
|
80
91
|
groupId: string;
|
|
81
|
-
|
|
92
|
+
id: string;
|
|
82
93
|
};
|
|
83
94
|
static readonly type = "[UsersGroups] Add User To Group";
|
|
84
95
|
constructor(payload: {
|
|
85
96
|
groupId: string;
|
|
86
|
-
|
|
97
|
+
id: string;
|
|
87
98
|
});
|
|
88
99
|
}
|
|
89
100
|
declare class UpdateUser {
|
|
90
|
-
|
|
101
|
+
id: string | undefined;
|
|
91
102
|
changes: Partial<User>;
|
|
92
103
|
static readonly type = "[UsersGroups] Update User";
|
|
93
|
-
constructor(
|
|
104
|
+
constructor(id: string | undefined, changes: Partial<User>);
|
|
94
105
|
}
|
|
95
106
|
declare class DeleteUser {
|
|
96
107
|
userName: string | number;
|
|
@@ -150,7 +161,7 @@ declare class UsersGroupsFacade {
|
|
|
150
161
|
getUsers(): rxjs.Observable<void>;
|
|
151
162
|
getUser(id: string | null): rxjs.Observable<void>;
|
|
152
163
|
createUser(payload: Partial<User>): rxjs.Observable<void>;
|
|
153
|
-
addUserToGroup(
|
|
164
|
+
addUserToGroup(id: string, groupId: string): rxjs.Observable<void>;
|
|
154
165
|
deleteUserFromGroup(payload: any): rxjs.Observable<void>;
|
|
155
166
|
updateUser(id: string | undefined, changes: Partial<User>): rxjs.Observable<void>;
|
|
156
167
|
deleteUser(userName: string | number): rxjs.Observable<void>;
|
|
@@ -188,7 +199,7 @@ declare class UsersGroupsState extends CrudStateBase<any, UsersGroupsStateModel,
|
|
|
188
199
|
getUser(ctx: StateContext<UsersGroupsStateModel>, { userName }: GetUser): rxjs.Observable<Response<User[]>>;
|
|
189
200
|
createUser(ctx: StateContext<UsersGroupsStateModel>, { payload }: CreateUser): rxjs.Observable<Response<User>>;
|
|
190
201
|
addUserToGroup(ctx: StateContext<UsersGroupsStateModel>, { payload }: AddUserToGroup): rxjs.Observable<Response<any>>;
|
|
191
|
-
updateUser(ctx: StateContext<UsersGroupsStateModel>, { changes,
|
|
202
|
+
updateUser(ctx: StateContext<UsersGroupsStateModel>, { changes, id }: UpdateUser): rxjs.Observable<Response<User>>;
|
|
192
203
|
deleteUser(ctx: StateContext<UsersGroupsStateModel>, { userName }: DeleteUser): rxjs.Observable<_masterteam_components.Response<void>>;
|
|
193
204
|
deleteUserFromGroup(ctx: StateContext<UsersGroupsStateModel>, { payload }: DeleteUserFromGroup): rxjs.Observable<Response<void>>;
|
|
194
205
|
getGroups(ctx: StateContext<UsersGroupsStateModel>): rxjs.Observable<Response<Group[]>>;
|
|
@@ -323,4 +334,4 @@ declare class GroupForm implements OnInit {
|
|
|
323
334
|
}
|
|
324
335
|
|
|
325
336
|
export { AddUserToGroup, ClearSelectedGroup, CreateGroup, CreateUser, DeleteGroup, DeleteUser, DeleteUserFromGroup, GetGroup, GetGroups, GetUser, GetUsers, GroupForm, Groups, UpdateGroup, UpdateUser, UserForm, Users, UsersGroups, UsersGroupsActionKey, UsersGroupsFacade, UsersGroupsState };
|
|
326
|
-
export type { Group, User, UsersGroupsStateModel };
|
|
337
|
+
export type { ApiDateValue, Group, TranslatedField, User, UsersGroupsStateModel };
|