@masterteam/users-groups 0.0.17 → 0.0.19

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.
@@ -47,6 +47,7 @@
47
47
  "reset-password": "إعادة تعيين كلمة المرور",
48
48
  "new-password": "كلمة المرور الجديدة",
49
49
  "mobile-invalid": "يرجى إدخال رقم هاتف صحيح (7-15 رقماً، ويمكن أن يبدأ بـ +)",
50
+ "email-invalid": "يرجى إدخال بريد إلكتروني صحيح (مثال: name@example.com)",
50
51
  "linked-groups": "المجموعات المرتبطة",
51
52
  "no-linked-groups": "هذا المستخدم غير مرتبط بأي مجموعة",
52
53
  "summary": "الملخص",
@@ -46,6 +46,7 @@
46
46
  "reset-password": "Reset Password",
47
47
  "new-password": "New Password",
48
48
  "mobile-invalid": "Please enter a valid phone number (7-15 digits, optionally starting with +)",
49
+ "email-invalid": "Please enter a valid email address (e.g. name@example.com)",
49
50
  "linked-groups": "Linked Groups",
50
51
  "no-linked-groups": "This user is not linked to any groups",
51
52
  "summary": "Summary",
@@ -12,7 +12,6 @@ import { Button } from '@masterteam/components/button';
12
12
  import { Table } from '@masterteam/components/table';
13
13
  import * as i1 from 'primeng/skeleton';
14
14
  import { SkeletonModule } from 'primeng/skeleton';
15
- import { Avatar } from '@masterteam/components/avatar';
16
15
  import { Icon } from '@masterteam/icons';
17
16
  import { ModalService } from '@masterteam/components/modal';
18
17
  import { toSignal } from '@angular/core/rxjs-interop';
@@ -22,6 +21,7 @@ import { DynamicForm } from '@masterteam/forms/dynamic-form';
22
21
  import { ModalRef, DialogService } from '@masterteam/components/dialog';
23
22
  import { Tabs } from '@masterteam/components/tabs';
24
23
  import { finalize } from 'rxjs';
24
+ import { Avatar } from '@masterteam/components/avatar';
25
25
  import { SecureImagePipe } from '@masterteam/components/upload-field';
26
26
 
27
27
  class GetUsers {
@@ -781,7 +781,7 @@ class UserForm {
781
781
  required: true,
782
782
  validators: [
783
783
  ValidatorConfig.required('Email is required'),
784
- ValidatorConfig.email('Please enter a valid email address'),
784
+ ValidatorConfig.pattern('^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z]{2,}$', this.translocoService.translate('users-groups.email-invalid')),
785
785
  ],
786
786
  colSpan: this.fieldColSpan(),
787
787
  order: 3,
@@ -912,7 +912,7 @@ class UserForm {
912
912
  }
913
913
  }
914
914
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: UserForm, deps: [], target: i0.ɵɵFactoryTarget.Component });
915
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: UserForm, isStandalone: true, selector: "mt-user-form", inputs: { userForEdit: { classPropertyName: "userForEdit", publicName: "userForEdit", isSignal: true, isRequired: false, transformFunction: null } }, providers: [DialogService], 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 (!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]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n [disabled]=\"createUpdateUserLoading()\"\r\n (click)=\"ref.close(false)\"\r\n />\r\n <mt-button\r\n [label]=\"selectedUser() ? ('save' | transloco) : ('add' | transloco)\"\r\n (click)=\"onSubmit()\"\r\n [loading]=\"createUpdateUserLoading()\"\r\n [disabled]=\"isSubmitDisabled()\"\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", "forcedHiddenFieldKeys", "preserveForcedHiddenValues", "visibleSectionKeys"], outputs: ["runtimeMessagesChange"] }, { 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: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "mode", "moreLabel", "size", "fluid", "disabled"], outputs: ["activeChange", "onChange"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
915
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: UserForm, isStandalone: true, selector: "mt-user-form", inputs: { userForEdit: { classPropertyName: "userForEdit", publicName: "userForEdit", isSignal: true, isRequired: false, transformFunction: null } }, providers: [DialogService], 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 (!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]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n [disabled]=\"createUpdateUserLoading()\"\r\n (click)=\"ref.close(false)\"\r\n />\r\n <mt-button\r\n [label]=\"selectedUser() ? ('save' | transloco) : ('add' | transloco)\"\r\n (click)=\"onSubmit()\"\r\n [loading]=\"createUpdateUserLoading()\"\r\n [disabled]=\"isSubmitDisabled()\"\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", "forcedHiddenFieldKeys", "preserveForcedHiddenValues", "visibleSectionKeys"], outputs: ["runtimeMessagesChange"] }, { 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: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "mode", "moreLabel", "defaultIcon", "size", "fluid", "disabled", "searchThreshold"], outputs: ["activeChange", "onChange"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
916
916
  }
917
917
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: UserForm, decorators: [{
918
918
  type: Component,
@@ -1126,7 +1126,7 @@ class UserLinkedGroups {
1126
1126
  return '';
1127
1127
  }
1128
1128
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: UserLinkedGroups, deps: [], target: i0.ɵɵFactoryTarget.Component });
1129
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: UserLinkedGroups, isStandalone: true, selector: "mt-user-linked-groups", inputs: { user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div class=\"flex flex-col gap-4 p-4 max-h-[75vh] overflow-auto\">\r\n <div class=\"flex items-center min-w-0\">\r\n <mt-tabs\r\n class=\"flex-1 min-w-0\"\r\n [options]=\"tabs()\"\r\n [(active)]=\"activeTab\"\r\n mode=\"underline\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n ></mt-tabs>\r\n <div\r\n class=\"flex items-center gap-2 pb-2 px-2 shrink-0 border-b border-slate-200 dark:border-slate-700\"\r\n >\r\n <mt-avatar\r\n [image]=\"\r\n userImage()\r\n ? $any(userImage() | secureImage: true : context : 'avatar/')\r\n : ''\r\n \"\r\n [icon]=\"'user.user-01'\"\r\n styleClass=\"w-8! h-8! text-lg! text-gray-600! bg-surface-300!\"\r\n ></mt-avatar>\r\n <div class=\"flex flex-col min-w-0\">\r\n <span\r\n class=\"text-sm font-medium text-slate-600 dark:text-slate-100 truncate\"\r\n [title]=\"userDisplayName()\"\r\n >\r\n {{ userDisplayName() }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n @if (loading()) {\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\r\n <p-skeleton height=\"4rem\"></p-skeleton>\r\n <p-skeleton height=\"4rem\"></p-skeleton>\r\n <p-skeleton height=\"4rem\"></p-skeleton>\r\n <p-skeleton height=\"4rem\"></p-skeleton>\r\n </div>\r\n } @else if (isEmpty()) {\r\n <div\r\n class=\"flex flex-col items-center justify-center text-center py-10 gap-2 text-slate-500 dark:text-slate-400\"\r\n >\r\n <mt-icon icon=\"general.link-broken-01\" class=\"text-2xl\" />\r\n <span class=\"text-sm font-medium\">\r\n @switch (activeTab()) {\r\n @case (\"groups\") {\r\n {{ t(\"no-linked-groups\") }}\r\n }\r\n @case (\"permissions\") {\r\n {{ t(\"no-permissions\") }}\r\n }\r\n @case (\"roles\") {\r\n {{ t(\"no-roles\") }}\r\n }\r\n @case (\"accessibilities\") {\r\n {{ t(\"no-accessibilities\") }}\r\n }\r\n }\r\n </span>\r\n </div>\r\n } @else {\r\n @switch (activeTab()) {\r\n @case (\"groups\") {\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3 pb-3\">\r\n @for (group of groups(); track group.id) {\r\n <div\r\n class=\"flex flex-col gap-2 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800 p-3 hover:shadow-sm transition-shadow\"\r\n >\r\n <div class=\"flex items-start justify-between gap-2\">\r\n <div class=\"flex items-center gap-3 min-w-0\">\r\n <span\r\n class=\"inline-flex items-center justify-center rounded-md bg-indigo-50 dark:bg-indigo-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"user.users-01\"\r\n class=\"text-indigo-600 dark:text-indigo-300 text-xl\"\r\n />\r\n </span>\r\n <div class=\"flex flex-col min-w-0\">\r\n <span\r\n class=\"text-md text-slate-800 dark:text-slate-100 truncate\"\r\n [title]=\"group.name\"\r\n >\r\n {{ group.name }}\r\n </span>\r\n <span\r\n class=\"inline-flex items-center gap-1 text-xs text-slate-500 dark:text-slate-400\"\r\n >\r\n <mt-icon icon=\"user.users-01\" class=\"text-sm\" />\r\n {{ group.membersCount }} {{ t(\"users-number\") }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n @if (group.isActivated) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-emerald-50 dark:bg-emerald-900/30 px-2 py-0.5 shrink-0\"\r\n >\r\n <span\r\n class=\"w-1.5 h-1.5 rounded-full bg-emerald-500\"\r\n ></span>\r\n <span\r\n class=\"text-emerald-700 dark:text-emerald-200 text-xs font-medium\"\r\n >\r\n {{ t(\"active\") }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-slate-100 dark:bg-slate-700 px-2 py-0.5 shrink-0\"\r\n >\r\n <span\r\n class=\"w-1.5 h-1.5 rounded-full bg-slate-400\"\r\n ></span>\r\n <span\r\n class=\"text-slate-600 dark:text-slate-200 text-xs font-medium\"\r\n >\r\n {{ t(\"inactive\") }}\r\n </span>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case (\"permissions\") {\r\n <div\r\n class=\"flex flex-col divide-y divide-slate-100 dark:divide-slate-700 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800\"\r\n >\r\n @for (permission of permissions(); track permission.id) {\r\n <div class=\"flex items-center gap-3 p-3\">\r\n <span\r\n class=\"inline-flex items-center justify-center rounded-md bg-amber-50 dark:bg-amber-900/30 p-2 shrink-0\"\r\n >\r\n <mt-icon\r\n icon=\"security.shield-tick\"\r\n class=\"text-amber-600 dark:text-amber-300 text-lg\"\r\n />\r\n </span>\r\n <div class=\"flex flex-col min-w-0 flex-1\">\r\n <span\r\n class=\"text-sm font-medium text-slate-800 dark:text-slate-100 truncate\"\r\n [title]=\"permission.name\"\r\n >\r\n {{ permission.name }}\r\n </span>\r\n <span\r\n class=\"text-xs text-slate-500 dark:text-slate-400 truncate\"\r\n [title]=\"permission.command\"\r\n >\r\n {{ permission.command }}\r\n </span>\r\n </div>\r\n @if (permission.moduleType) {\r\n <span\r\n class=\"inline-flex items-center rounded-md bg-slate-50 dark:bg-slate-900/30 px-2 py-0.5 shrink-0 text-xs text-slate-600 dark:text-slate-300 font-medium\"\r\n >\r\n {{ permission.moduleType }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case (\"roles\") {\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3 pb-3\">\r\n @for (role of roles(); track role.id) {\r\n <div\r\n class=\"flex items-center gap-3 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800 p-3\"\r\n >\r\n <span\r\n class=\"inline-flex items-center justify-center rounded-md bg-violet-50 dark:bg-violet-900/30 p-2 shrink-0\"\r\n >\r\n <mt-icon\r\n icon=\"user.user-check-01\"\r\n class=\"text-violet-600 dark:text-violet-300 text-xl\"\r\n />\r\n </span>\r\n <div class=\"flex flex-col min-w-0 flex-1\">\r\n <span\r\n class=\"text-md text-slate-800 dark:text-slate-100 truncate\"\r\n [title]=\"role.name\"\r\n >\r\n {{ role.name }}\r\n </span>\r\n @if (role.moduleType) {\r\n <span class=\"text-xs text-slate-500 dark:text-slate-400\">\r\n {{ role.moduleType }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case (\"accessibilities\") {\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3 pb-3\">\r\n @for (accessibility of accessibilities(); track accessibility.id) {\r\n <div\r\n class=\"flex items-center gap-3 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800 p-3\"\r\n >\r\n <span\r\n class=\"inline-flex items-center justify-center rounded-md bg-sky-50 dark:bg-sky-900/30 p-2 shrink-0\"\r\n >\r\n <mt-icon\r\n icon=\"security.lock-unlocked-01\"\r\n class=\"text-sky-600 dark:text-sky-300 text-xl\"\r\n />\r\n </span>\r\n <div class=\"flex flex-col min-w-0 flex-1\">\r\n <span\r\n class=\"text-md text-slate-800 dark:text-slate-100 truncate\"\r\n [title]=\"accessibility.name\"\r\n >\r\n {{ accessibility.name }}\r\n </span>\r\n @if (accessibility.category) {\r\n <span class=\"text-xs text-slate-500 dark:text-slate-400\">\r\n {{ accessibility.category }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n }\r\n </div>\r\n</ng-container>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: Icon, selector: "mt-icon", inputs: ["icon"] }, { kind: "component", type: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "mode", "moreLabel", "size", "fluid", "disabled"], outputs: ["activeChange", "onChange"] }, { kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }, { kind: "pipe", type: SecureImagePipe, name: "secureImage" }] });
1129
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: UserLinkedGroups, isStandalone: true, selector: "mt-user-linked-groups", inputs: { user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div class=\"flex flex-col gap-4 p-4 max-h-[75vh] overflow-auto\">\r\n <div class=\"flex items-center min-w-0\">\r\n <mt-tabs\r\n class=\"flex-1 min-w-0\"\r\n [options]=\"tabs()\"\r\n [(active)]=\"activeTab\"\r\n mode=\"underline\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n ></mt-tabs>\r\n <div\r\n class=\"flex items-center gap-2 pb-2 px-2 shrink-0 border-b border-slate-200 dark:border-slate-700\"\r\n >\r\n <mt-avatar\r\n [image]=\"\r\n userImage()\r\n ? $any(userImage() | secureImage: true : context : 'avatar/')\r\n : ''\r\n \"\r\n [icon]=\"'user.user-01'\"\r\n styleClass=\"w-8! h-8! text-lg! text-gray-600! bg-surface-300!\"\r\n ></mt-avatar>\r\n <div class=\"flex flex-col min-w-0\">\r\n <span\r\n class=\"text-sm font-medium text-slate-600 dark:text-slate-100 truncate\"\r\n [title]=\"userDisplayName()\"\r\n >\r\n {{ userDisplayName() }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n @if (loading()) {\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\r\n <p-skeleton height=\"4rem\"></p-skeleton>\r\n <p-skeleton height=\"4rem\"></p-skeleton>\r\n <p-skeleton height=\"4rem\"></p-skeleton>\r\n <p-skeleton height=\"4rem\"></p-skeleton>\r\n </div>\r\n } @else if (isEmpty()) {\r\n <div\r\n class=\"flex flex-col items-center justify-center text-center py-10 gap-2 text-slate-500 dark:text-slate-400\"\r\n >\r\n <mt-icon icon=\"general.link-broken-01\" class=\"text-2xl\" />\r\n <span class=\"text-sm font-medium\">\r\n @switch (activeTab()) {\r\n @case (\"groups\") {\r\n {{ t(\"no-linked-groups\") }}\r\n }\r\n @case (\"permissions\") {\r\n {{ t(\"no-permissions\") }}\r\n }\r\n @case (\"roles\") {\r\n {{ t(\"no-roles\") }}\r\n }\r\n @case (\"accessibilities\") {\r\n {{ t(\"no-accessibilities\") }}\r\n }\r\n }\r\n </span>\r\n </div>\r\n } @else {\r\n @switch (activeTab()) {\r\n @case (\"groups\") {\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3 pb-3\">\r\n @for (group of groups(); track group.id) {\r\n <div\r\n class=\"flex flex-col gap-2 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800 p-3 hover:shadow-sm transition-shadow\"\r\n >\r\n <div class=\"flex items-start justify-between gap-2\">\r\n <div class=\"flex items-center gap-3 min-w-0\">\r\n <span\r\n class=\"inline-flex items-center justify-center rounded-md bg-indigo-50 dark:bg-indigo-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"user.users-01\"\r\n class=\"text-indigo-600 dark:text-indigo-300 text-xl\"\r\n />\r\n </span>\r\n <div class=\"flex flex-col min-w-0\">\r\n <span\r\n class=\"text-md text-slate-800 dark:text-slate-100 truncate\"\r\n [title]=\"group.name\"\r\n >\r\n {{ group.name }}\r\n </span>\r\n <span\r\n class=\"inline-flex items-center gap-1 text-xs text-slate-500 dark:text-slate-400\"\r\n >\r\n <mt-icon icon=\"user.users-01\" class=\"text-sm\" />\r\n {{ group.membersCount }} {{ t(\"users-number\") }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n @if (group.isActivated) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-emerald-50 dark:bg-emerald-900/30 px-2 py-0.5 shrink-0\"\r\n >\r\n <span\r\n class=\"w-1.5 h-1.5 rounded-full bg-emerald-500\"\r\n ></span>\r\n <span\r\n class=\"text-emerald-700 dark:text-emerald-200 text-xs font-medium\"\r\n >\r\n {{ t(\"active\") }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-slate-100 dark:bg-slate-700 px-2 py-0.5 shrink-0\"\r\n >\r\n <span\r\n class=\"w-1.5 h-1.5 rounded-full bg-slate-400\"\r\n ></span>\r\n <span\r\n class=\"text-slate-600 dark:text-slate-200 text-xs font-medium\"\r\n >\r\n {{ t(\"inactive\") }}\r\n </span>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case (\"permissions\") {\r\n <div\r\n class=\"flex flex-col divide-y divide-slate-100 dark:divide-slate-700 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800\"\r\n >\r\n @for (permission of permissions(); track permission.id) {\r\n <div class=\"flex items-center gap-3 p-3\">\r\n <span\r\n class=\"inline-flex items-center justify-center rounded-md bg-amber-50 dark:bg-amber-900/30 p-2 shrink-0\"\r\n >\r\n <mt-icon\r\n icon=\"security.shield-tick\"\r\n class=\"text-amber-600 dark:text-amber-300 text-lg\"\r\n />\r\n </span>\r\n <div class=\"flex flex-col min-w-0 flex-1\">\r\n <span\r\n class=\"text-sm font-medium text-slate-800 dark:text-slate-100 truncate\"\r\n [title]=\"permission.name\"\r\n >\r\n {{ permission.name }}\r\n </span>\r\n <span\r\n class=\"text-xs text-slate-500 dark:text-slate-400 truncate\"\r\n [title]=\"permission.command\"\r\n >\r\n {{ permission.command }}\r\n </span>\r\n </div>\r\n @if (permission.moduleType) {\r\n <span\r\n class=\"inline-flex items-center rounded-md bg-slate-50 dark:bg-slate-900/30 px-2 py-0.5 shrink-0 text-xs text-slate-600 dark:text-slate-300 font-medium\"\r\n >\r\n {{ permission.moduleType }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case (\"roles\") {\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3 pb-3\">\r\n @for (role of roles(); track role.id) {\r\n <div\r\n class=\"flex items-center gap-3 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800 p-3\"\r\n >\r\n <span\r\n class=\"inline-flex items-center justify-center rounded-md bg-violet-50 dark:bg-violet-900/30 p-2 shrink-0\"\r\n >\r\n <mt-icon\r\n icon=\"user.user-check-01\"\r\n class=\"text-violet-600 dark:text-violet-300 text-xl\"\r\n />\r\n </span>\r\n <div class=\"flex flex-col min-w-0 flex-1\">\r\n <span\r\n class=\"text-md text-slate-800 dark:text-slate-100 truncate\"\r\n [title]=\"role.name\"\r\n >\r\n {{ role.name }}\r\n </span>\r\n @if (role.moduleType) {\r\n <span class=\"text-xs text-slate-500 dark:text-slate-400\">\r\n {{ role.moduleType }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case (\"accessibilities\") {\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3 pb-3\">\r\n @for (accessibility of accessibilities(); track accessibility.id) {\r\n <div\r\n class=\"flex items-center gap-3 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800 p-3\"\r\n >\r\n <span\r\n class=\"inline-flex items-center justify-center rounded-md bg-sky-50 dark:bg-sky-900/30 p-2 shrink-0\"\r\n >\r\n <mt-icon\r\n icon=\"security.lock-unlocked-01\"\r\n class=\"text-sky-600 dark:text-sky-300 text-xl\"\r\n />\r\n </span>\r\n <div class=\"flex flex-col min-w-0 flex-1\">\r\n <span\r\n class=\"text-md text-slate-800 dark:text-slate-100 truncate\"\r\n [title]=\"accessibility.name\"\r\n >\r\n {{ accessibility.name }}\r\n </span>\r\n @if (accessibility.category) {\r\n <span class=\"text-xs text-slate-500 dark:text-slate-400\">\r\n {{ accessibility.category }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n }\r\n </div>\r\n</ng-container>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: Icon, selector: "mt-icon", inputs: ["icon"] }, { kind: "component", type: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "mode", "moreLabel", "defaultIcon", "size", "fluid", "disabled", "searchThreshold"], outputs: ["activeChange", "onChange"] }, { kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }, { kind: "pipe", type: SecureImagePipe, name: "secureImage" }] });
1130
1130
  }
1131
1131
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: UserLinkedGroups, decorators: [{
1132
1132
  type: Component,
@@ -1392,18 +1392,11 @@ class Users {
1392
1392
  });
1393
1393
  }
1394
1394
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: Users, deps: [], target: i0.ɵɵFactoryTarget.Component });
1395
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: Users, isStandalone: true, selector: "mt-users", viewQueries: [{ propertyName: "typeCol", first: true, predicate: ["typeCol"], descendants: true, isSignal: true }, { propertyName: "applicationLinkCol", first: true, predicate: ["applicationLinkCol"], 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 #typeCol let-row>\r\n @if (row.isExternal) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-slate-50 dark:bg-slate-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"general.link-external-02\"\r\n class=\"text-slate-600 dark:text-slate-300 text-sm\"\r\n />\r\n <span class=\"text-slate-700 dark:text-slate-200 text-xs font-medium\">\r\n {{ t(\"external\") }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-emerald-50 dark:bg-emerald-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"user.users-01\"\r\n class=\"text-emerald-600 dark:text-emerald-300 text-sm\"\r\n />\r\n <span\r\n class=\"text-emerald-700 dark:text-emerald-200 text-xs font-medium\"\r\n >\r\n {{ t(\"internal\") }}\r\n </span>\r\n </span>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #applicationLinkCol let-row>\r\n @if (isLinkedToCurrentApplication(row)) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-emerald-50 dark:bg-emerald-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"user.user-check-01\"\r\n class=\"text-emerald-600 dark:text-emerald-300 text-sm\"\r\n />\r\n <span\r\n class=\"text-emerald-700 dark:text-emerald-200 text-xs font-medium\"\r\n >\r\n {{ t(\"linked\") }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-amber-50 dark:bg-amber-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"general.link-broken-01\"\r\n class=\"text-amber-600 dark:text-amber-300 text-sm\"\r\n />\r\n <span class=\"text-amber-700 dark:text-amber-200 text-xs font-medium\">\r\n {{ t(\"not-linked\") }}\r\n </span>\r\n </span>\r\n }\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 storageKey=\"users-groups-users-table\"\r\n >\r\n </mt-table>\r\n </div>\r\n</ng-container>\r\n", styles: [""], 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", "clickableRows", "generalSearch", "lazyLocalSearch", "showFilters", "filterMode", "loading", "updating", "lazy", "lazyLocalSort", "lazyTotalRecords", "reorderableColumns", "reorderableRows", "dataKey", "storageKey", "storageMode", "exportable", "printable", "groupable", "cellClickFilter", "freezeActions", "printTitle", "exportFilename", "actionShape", "rowActionsLoadingFn", "tableLayout", "noCard", "tabs", "tabsOptionLabel", "tabsOptionValue", "activeTab", "actions", "paginatorPosition", "alwaysShowPaginator", "rowsPerPageOptions", "pageSize", "currentPage", "first", "filterTerm", "groupBy"], outputs: ["selectionChange", "cellChange", "lazyLoad", "columnReorder", "rowReorder", "rowClick", "rowActionsRequested", "filtersChange", "activeTabChange", "onTabChange", "pageSizeChange", "currentPageChange", "firstChange", "filterTermChange", "groupByChange"] }, { kind: "component", type: Icon, selector: "mt-icon", inputs: ["icon"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] });
1395
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: Users, isStandalone: true, selector: "mt-users", viewQueries: [{ propertyName: "typeCol", first: true, predicate: ["typeCol"], descendants: true, isSignal: true }, { propertyName: "applicationLinkCol", first: true, predicate: ["applicationLinkCol"], 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 #typeCol let-row>\r\n @if (row.isExternal) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-slate-50 dark:bg-slate-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"general.link-external-02\"\r\n class=\"text-slate-600 dark:text-slate-300 text-sm\"\r\n />\r\n <span class=\"text-slate-700 dark:text-slate-200 text-xs font-medium\">\r\n {{ t(\"external\") }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-emerald-50 dark:bg-emerald-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"user.users-01\"\r\n class=\"text-emerald-600 dark:text-emerald-300 text-sm\"\r\n />\r\n <span\r\n class=\"text-emerald-700 dark:text-emerald-200 text-xs font-medium\"\r\n >\r\n {{ t(\"internal\") }}\r\n </span>\r\n </span>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #applicationLinkCol let-row>\r\n @if (isLinkedToCurrentApplication(row)) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-emerald-50 dark:bg-emerald-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"user.user-check-01\"\r\n class=\"text-emerald-600 dark:text-emerald-300 text-sm\"\r\n />\r\n <span\r\n class=\"text-emerald-700 dark:text-emerald-200 text-xs font-medium\"\r\n >\r\n {{ t(\"linked\") }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-amber-50 dark:bg-amber-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"general.link-broken-01\"\r\n class=\"text-amber-600 dark:text-amber-300 text-sm\"\r\n />\r\n <span class=\"text-amber-700 dark:text-amber-200 text-xs font-medium\">\r\n {{ t(\"not-linked\") }}\r\n </span>\r\n </span>\r\n }\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]=\"false\"\r\n [loading]=\"loading()\"\r\n storageKey=\"users-groups-users-table\"\r\n >\r\n </mt-table>\r\n </div>\r\n</ng-container>\r\n", styles: [""], 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", "clickableRows", "generalSearch", "lazyLocalSearch", "showFilters", "filterMode", "loading", "updating", "lazy", "lazyLocalSort", "lazyTotalRecords", "reorderableColumns", "reorderableRows", "dataKey", "storageKey", "storageMode", "exportable", "printable", "groupable", "cellClickFilter", "freezeActions", "printTitle", "exportFilename", "actionShape", "rowActionsLoadingFn", "tableLayout", "noCard", "tabs", "tabsOptionLabel", "tabsOptionValue", "activeTab", "actions", "paginatorPosition", "alwaysShowPaginator", "rowsPerPageOptions", "pageSize", "currentPage", "first", "filterTerm", "groupBy"], outputs: ["selectionChange", "cellChange", "lazyLoad", "columnReorder", "rowReorder", "rowClick", "rowActionsRequested", "filtersChange", "activeTabChange", "onTabChange", "pageSizeChange", "currentPageChange", "firstChange", "filterTermChange", "groupByChange"] }, { kind: "component", type: Icon, selector: "mt-icon", inputs: ["icon"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] });
1396
1396
  }
1397
1397
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: Users, decorators: [{
1398
1398
  type: Component,
1399
- args: [{ selector: 'mt-users', standalone: true, imports: [
1400
- CommonModule,
1401
- SkeletonModule,
1402
- Table,
1403
- Avatar,
1404
- Icon,
1405
- TranslocoDirective,
1406
- ], template: "<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div class=\"mt-5\">\r\n <ng-template #typeCol let-row>\r\n @if (row.isExternal) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-slate-50 dark:bg-slate-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"general.link-external-02\"\r\n class=\"text-slate-600 dark:text-slate-300 text-sm\"\r\n />\r\n <span class=\"text-slate-700 dark:text-slate-200 text-xs font-medium\">\r\n {{ t(\"external\") }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-emerald-50 dark:bg-emerald-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"user.users-01\"\r\n class=\"text-emerald-600 dark:text-emerald-300 text-sm\"\r\n />\r\n <span\r\n class=\"text-emerald-700 dark:text-emerald-200 text-xs font-medium\"\r\n >\r\n {{ t(\"internal\") }}\r\n </span>\r\n </span>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #applicationLinkCol let-row>\r\n @if (isLinkedToCurrentApplication(row)) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-emerald-50 dark:bg-emerald-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"user.user-check-01\"\r\n class=\"text-emerald-600 dark:text-emerald-300 text-sm\"\r\n />\r\n <span\r\n class=\"text-emerald-700 dark:text-emerald-200 text-xs font-medium\"\r\n >\r\n {{ t(\"linked\") }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-amber-50 dark:bg-amber-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"general.link-broken-01\"\r\n class=\"text-amber-600 dark:text-amber-300 text-sm\"\r\n />\r\n <span class=\"text-amber-700 dark:text-amber-200 text-xs font-medium\">\r\n {{ t(\"not-linked\") }}\r\n </span>\r\n </span>\r\n }\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 storageKey=\"users-groups-users-table\"\r\n >\r\n </mt-table>\r\n </div>\r\n</ng-container>\r\n" }]
1399
+ args: [{ selector: 'mt-users', standalone: true, imports: [CommonModule, SkeletonModule, Table, Icon, TranslocoDirective], template: "<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div class=\"mt-5\">\r\n <ng-template #typeCol let-row>\r\n @if (row.isExternal) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-slate-50 dark:bg-slate-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"general.link-external-02\"\r\n class=\"text-slate-600 dark:text-slate-300 text-sm\"\r\n />\r\n <span class=\"text-slate-700 dark:text-slate-200 text-xs font-medium\">\r\n {{ t(\"external\") }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-emerald-50 dark:bg-emerald-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"user.users-01\"\r\n class=\"text-emerald-600 dark:text-emerald-300 text-sm\"\r\n />\r\n <span\r\n class=\"text-emerald-700 dark:text-emerald-200 text-xs font-medium\"\r\n >\r\n {{ t(\"internal\") }}\r\n </span>\r\n </span>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #applicationLinkCol let-row>\r\n @if (isLinkedToCurrentApplication(row)) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-emerald-50 dark:bg-emerald-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"user.user-check-01\"\r\n class=\"text-emerald-600 dark:text-emerald-300 text-sm\"\r\n />\r\n <span\r\n class=\"text-emerald-700 dark:text-emerald-200 text-xs font-medium\"\r\n >\r\n {{ t(\"linked\") }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-amber-50 dark:bg-amber-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"general.link-broken-01\"\r\n class=\"text-amber-600 dark:text-amber-300 text-sm\"\r\n />\r\n <span class=\"text-amber-700 dark:text-amber-200 text-xs font-medium\">\r\n {{ t(\"not-linked\") }}\r\n </span>\r\n </span>\r\n }\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]=\"false\"\r\n [loading]=\"loading()\"\r\n storageKey=\"users-groups-users-table\"\r\n >\r\n </mt-table>\r\n </div>\r\n</ng-container>\r\n" }]
1407
1400
  }], propDecorators: { typeCol: [{ type: i0.ViewChild, args: ['typeCol', { isSignal: true }] }], applicationLinkCol: [{ type: i0.ViewChild, args: ['applicationLinkCol', { isSignal: true }] }] } });
1408
1401
 
1409
1402
  class GroupForm {
@@ -1669,11 +1662,11 @@ class Groups {
1669
1662
  });
1670
1663
  }
1671
1664
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: Groups, deps: [], target: i0.ɵɵFactoryTarget.Component });
1672
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.8", type: Groups, isStandalone: true, selector: "mt-groups", ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div class=\"mt-5\">\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 storageKey=\"users-groups-groups-table\"\r\n >\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", "clickableRows", "generalSearch", "lazyLocalSearch", "showFilters", "filterMode", "loading", "updating", "lazy", "lazyLocalSort", "lazyTotalRecords", "reorderableColumns", "reorderableRows", "dataKey", "storageKey", "storageMode", "exportable", "printable", "groupable", "cellClickFilter", "freezeActions", "printTitle", "exportFilename", "actionShape", "rowActionsLoadingFn", "tableLayout", "noCard", "tabs", "tabsOptionLabel", "tabsOptionValue", "activeTab", "actions", "paginatorPosition", "alwaysShowPaginator", "rowsPerPageOptions", "pageSize", "currentPage", "first", "filterTerm", "groupBy"], outputs: ["selectionChange", "cellChange", "lazyLoad", "columnReorder", "rowReorder", "rowClick", "rowActionsRequested", "filtersChange", "activeTabChange", "onTabChange", "pageSizeChange", "currentPageChange", "firstChange", "filterTermChange", "groupByChange"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] });
1665
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.8", type: Groups, isStandalone: true, selector: "mt-groups", ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div class=\"mt-5\">\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]=\"false\"\r\n [loading]=\"loading()\"\r\n storageKey=\"users-groups-groups-table\"\r\n >\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", "clickableRows", "generalSearch", "lazyLocalSearch", "showFilters", "filterMode", "loading", "updating", "lazy", "lazyLocalSort", "lazyTotalRecords", "reorderableColumns", "reorderableRows", "dataKey", "storageKey", "storageMode", "exportable", "printable", "groupable", "cellClickFilter", "freezeActions", "printTitle", "exportFilename", "actionShape", "rowActionsLoadingFn", "tableLayout", "noCard", "tabs", "tabsOptionLabel", "tabsOptionValue", "activeTab", "actions", "paginatorPosition", "alwaysShowPaginator", "rowsPerPageOptions", "pageSize", "currentPage", "first", "filterTerm", "groupBy"], outputs: ["selectionChange", "cellChange", "lazyLoad", "columnReorder", "rowReorder", "rowClick", "rowActionsRequested", "filtersChange", "activeTabChange", "onTabChange", "pageSizeChange", "currentPageChange", "firstChange", "filterTermChange", "groupByChange"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] });
1673
1666
  }
1674
1667
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: Groups, decorators: [{
1675
1668
  type: Component,
1676
- 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 <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 storageKey=\"users-groups-groups-table\"\r\n >\r\n </mt-table>\r\n </div>\r\n</ng-container>\r\n", styles: [".groups{padding:2rem}\n"] }]
1669
+ 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 <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]=\"false\"\r\n [loading]=\"loading()\"\r\n storageKey=\"users-groups-groups-table\"\r\n >\r\n </mt-table>\r\n </div>\r\n</ng-container>\r\n", styles: [".groups{padding:2rem}\n"] }]
1677
1670
  }] });
1678
1671
 
1679
1672
  // 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/reset-password-form/reset-password-form.ts","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/users/reset-password-form/reset-password-form.html","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/users/user-linked-groups/user-linked-groups.ts","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/users/user-linked-groups/user-linked-groups.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, ResetUserPasswordPayload } 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\n\r\nexport class LinkUserToApplication {\r\n static readonly type = '[UsersGroups] Link User To Application';\r\n constructor(public userName: string | number) {}\r\n}\r\n\r\nexport class GetUserSummary {\r\n static readonly type = '[UsersGroups] Get User Summary';\r\n constructor(public userName: string) {}\r\n}\r\nexport class ResetUserPassword {\r\n static readonly type = '[UsersGroups] Reset User Password';\r\n constructor(\r\n public id: string | number,\r\n public payload: ResetUserPasswordPayload,\r\n ) {}\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 isLinkedToCurrentApplication?: 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 Role {\r\n id: string;\r\n key?: string;\r\n name?: TranslatedField | string;\r\n moduleId?: number;\r\n moduleType?: string;\r\n sourceId?: number;\r\n applicationId?: number;\r\n extraInfo?: any[];\r\n}\r\n\r\nexport interface Permission {\r\n id: number;\r\n name?: string | TranslatedField;\r\n moduleId?: number;\r\n applicationId?: number;\r\n moduleType?: string;\r\n command?: string;\r\n}\r\n\r\nexport interface Accessibility {\r\n id: number;\r\n moduleKey?: string;\r\n moduleName?: TranslatedField | string;\r\n category?: string;\r\n name?: TranslatedField | string;\r\n enableMFACheck?: boolean;\r\n createdAt?: ApiDateValue;\r\n applicationId?: number;\r\n groups?: any[];\r\n}\r\n\r\nexport interface UserSummary {\r\n user?: User | null;\r\n groups: Group[];\r\n roles: Role[];\r\n permissions: Permission[];\r\n accessibilities: Accessibility[];\r\n groupsCount?: number;\r\n rolesCount?: number;\r\n permissionsCount?: number;\r\n accessibilitiesCount?: 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 LinkUserToApplication = 'linkUserToApplication',\r\n GetUserSummary = 'getUserSummary',\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 ResetUserPassword = 'resetUserPassword',\r\n}\r\n\r\nexport interface UsersGroupsStateModel extends LoadingStateShape<UsersGroupsActionKey> {\r\n users: User[];\r\n selectedUser: User | null;\r\n userSummary: UserSummary | null;\r\n groups: Group[];\r\n selectedGroup: Group | null;\r\n}\r\n\r\nexport interface ResetUserPasswordPayload {\r\n userName: string;\r\n newPassword: string;\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 GetUserSummary,\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 ResetUserPassword,\r\n LinkUserToApplication,\r\n} from './users-groups.actions';\r\nimport {\r\n User,\r\n Group,\r\n UserSummary,\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 userSummary: 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 private encodeUserName(userName: string | number): string {\r\n return encodeURIComponent(String(userName));\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 getUserSummary(state: UsersGroupsStateModel): UserSummary | null {\r\n return state.userSummary;\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 encodedUserName = this.encodeUserName(userName ?? '');\r\n const req$ = this.http.get<Response<User>>(\r\n `Identity/users/${encodedUserName}?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 ?? 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 updatedGroup = response.data;\r\n if (!updatedGroup) return {};\r\n\r\n return {\r\n selectedGroup: {\r\n ...(state.selectedGroup ?? {}),\r\n ...updatedGroup,\r\n },\r\n groups: this.adapter.upsertOne(\r\n state.groups as any[],\r\n updatedGroup,\r\n 'id' as any,\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 encodedUserName = this.encodeUserName(id ?? '');\r\n const req$ = this.http.put<Response<User>>(\r\n `Identity/users/${encodedUserName}`,\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 encodedUserName = this.encodeUserName(userName);\r\n const userNameKey = String(userName);\r\n const req$ = this.http.delete<Response<void>>(\r\n `Identity/users/${encodedUserName}`,\r\n {\r\n context: this.context,\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.DeleteUser,\r\n request$: req$,\r\n onSuccess: (_response, state) => ({\r\n users: this.adapter.updateOne(\r\n state.users as any[],\r\n userNameKey,\r\n { isLinkedToCurrentApplication: false },\r\n 'userName' as any,\r\n ),\r\n }),\r\n });\r\n }\r\n\r\n @Action(LinkUserToApplication)\r\n linkUserToApplication(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { userName }: LinkUserToApplication,\r\n ) {\r\n const encodedUserName = this.encodeUserName(userName);\r\n const userNameKey = String(userName);\r\n const req$ = this.http.put<Response<User | null>>(\r\n `Identity/users/${encodedUserName}/application/link`,\r\n {},\r\n {\r\n context: this.context,\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.LinkUserToApplication,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const linkedUser = {\r\n ...(state.users.find((user) => user.userName === userNameKey) ?? {}),\r\n ...(response.data ?? {}),\r\n userName: userNameKey,\r\n isLinkedToCurrentApplication: true,\r\n };\r\n\r\n return {\r\n users: this.adapter.upsertOne(\r\n state.users as any[],\r\n linkedUser,\r\n 'userName' as any,\r\n ),\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(GetUserSummary)\r\n getUserSummary(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { userName }: GetUserSummary,\r\n ) {\r\n const encodedUserName = this.encodeUserName(userName);\r\n const req$ = this.http.get<Response<UserSummary>>(\r\n `identity/users/${encodedUserName}/summary`,\r\n { context: this.context },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.GetUserSummary,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n userSummary: response.data ?? null,\r\n }),\r\n });\r\n }\r\n\r\n @Action(ResetUserPassword)\r\n resetUserPassword(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { id, payload }: ResetUserPassword,\r\n ) {\r\n const encodedUserName = this.encodeUserName(id);\r\n const req$ = this.http.put<Response<void>>(\r\n `Identity/users/${encodedUserName}/password/reset`,\r\n payload,\r\n {\r\n context: this.context,\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.ResetUserPassword,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n });\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 GetUserSummary,\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 ResetUserPassword,\r\n LinkUserToApplication,\r\n} from './users-groups.actions';\r\nimport {\r\n User,\r\n Group,\r\n UsersGroupsActionKey,\r\n ResetUserPasswordPayload,\r\n} 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 userSummary = select(UsersGroupsState.getUserSummary);\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 readonly isLinkingUserToApplication = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.LinkUserToApplication),\r\n );\r\n readonly isLoadingUserSummary = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.GetUserSummary),\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 readonly isResettingPassword = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.ResetUserPassword),\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 linkUserToApplication(userName: string | number) {\r\n return this.store.dispatch(new LinkUserToApplication(userName));\r\n }\r\n\r\n getUserSummary(userName: string) {\r\n return this.store.dispatch(new GetUserSummary(userName));\r\n }\r\n\r\n resetUserPassword(id: string | number, payload: ResetUserPasswordPayload) {\r\n return this.store.dispatch(new ResetUserPassword(id, payload));\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 { toSignal } from '@angular/core/rxjs-interop';\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\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 private readonly passwordPattern =\r\n '^(?=.*[A-Z])(?=.*[^a-zA-Z0-9])(?=.*[a-z])(?=.*\\\\d).{6,}$';\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 private readonly internalFormEvents = toSignal(\r\n this.internalUserFormControl.events,\r\n { initialValue: null },\r\n );\r\n private readonly externalFormEvents = toSignal(\r\n this.externalUserFormControl.events,\r\n { initialValue: null },\r\n );\r\n getUserFormLoading = this.facade.isLoadingUser;\r\n createUpdateUserLoading = this.facade.isSavingUser;\r\n isEditMode = computed(() => !!this.userForEdit()?.userName);\r\n isSubmitDisabled = computed(() => {\r\n if (this.createUpdateUserLoading()) {\r\n return true;\r\n }\r\n\r\n if (this.isEditMode()) {\r\n this.externalFormEvents();\r\n return (\r\n this.externalUserFormControl.pristine ||\r\n !this.externalUserFormControl.valid\r\n );\r\n }\r\n\r\n if (this.selectedTab() === 'internal') {\r\n this.internalFormEvents();\r\n return !this.internalUserFormControl.valid;\r\n }\r\n\r\n this.externalFormEvents();\r\n return !this.externalUserFormControl.valid;\r\n });\r\n context = new HttpContext().set(REQUEST_CONTEXT, {\r\n useBaseUrl: false,\r\n });\r\n contextGatway = 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: this.translocoService.translate('users-groups.avatar'),\r\n shape: 'circle',\r\n endPoint: 'avatar',\r\n context: this.contextGatway,\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: 3,\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: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.pattern(\r\n '^\\\\+?[0-9]{7,15}$',\r\n this.translocoService.translate('users-groups.mobile-invalid'),\r\n ),\r\n ],\r\n colSpan: this.fieldColSpan(),\r\n order: 4,\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()?.image,\r\n };\r\n this.externalUserFormControl.patchValue(data);\r\n this.externalUserFormControl.markAsPristine();\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()?.userName, 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 const passwordRules = this.translocoService.translate(\r\n 'users-groups.password-rules',\r\n );\r\n\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: 5,\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 hint: passwordRules,\r\n validators: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.pattern(this.passwordPattern, passwordRules),\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 hint: passwordRules,\r\n validators: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.pattern(this.passwordPattern, passwordRules),\r\n ValidatorConfig.custom((value, control) => {\r\n const password = control?.parent?.get('password')?.value;\r\n return !value || !password || value === password;\r\n }, this.translocoService.translate('users-groups.passwords-must-match')),\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","<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]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n [disabled]=\"createUpdateUserLoading()\"\r\n (click)=\"ref.close(false)\"\r\n />\r\n <mt-button\r\n [label]=\"selectedUser() ? ('save' | transloco) : ('add' | transloco)\"\r\n (click)=\"onSubmit()\"\r\n [loading]=\"createUpdateUserLoading()\"\r\n [disabled]=\"isSubmitDisabled()\"\r\n />\r\n </div>\r\n</ng-container>\r\n","import { Component, computed, inject, input, OnInit } from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\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 { DynamicFormConfig, ValidatorConfig } from '@masterteam/components';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { DialogService, ModalRef } from '@masterteam/components/dialog';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { UsersGroupsFacade } from '../../../../../public-api';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'mt-reset-password-form',\r\n templateUrl: './reset-password-form.html',\r\n styleUrls: ['./reset-password-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 ],\r\n providers: [DialogService],\r\n})\r\nexport default class ResetPasswordForm implements OnInit {\r\n private readonly passwordPattern =\r\n '^(?=.*[A-Z])(?=.*[^a-zA-Z0-9])(?=.*[a-z])(?=.*\\\\d).{6,}$';\r\n modal: ModalService = inject(ModalService);\r\n ref: ModalRef = inject(ModalRef);\r\n translocoService: TranslocoService = inject(TranslocoService);\r\n facade: UsersGroupsFacade = inject(UsersGroupsFacade);\r\n\r\n user = input<any>(null);\r\n\r\n passwordResetLoading = this.facade.isResettingPassword;\r\n\r\n resetPasswordFormControl = new FormControl();\r\n resetPasswordFormConfig = computed<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'resetPasswordFormConfig',\r\n type: 'header',\r\n order: 1,\r\n fields: [\r\n {\r\n key: 'displayName',\r\n inputType: 'text',\r\n disabled: true,\r\n label: this.translocoService.translate('users-groups.user'),\r\n value: this.user()?.displayName || '',\r\n },\r\n {\r\n key: 'newPassword',\r\n inputType: 'password',\r\n label: this.translocoService.translate('users-groups.new-password'),\r\n hint: this.translocoService.translate(\r\n 'users-groups.password-rules',\r\n ),\r\n validators: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.pattern(\r\n this.passwordPattern,\r\n this.translocoService.translate('users-groups.password-rules'),\r\n ),\r\n ],\r\n },\r\n {\r\n key: 'confirmPassword',\r\n inputType: 'password',\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 hint: this.translocoService.translate(\r\n 'users-groups.password-rules',\r\n ),\r\n validators: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.pattern(\r\n this.passwordPattern,\r\n this.translocoService.translate('users-groups.password-rules'),\r\n ),\r\n ValidatorConfig.custom((value, control) => {\r\n const newPassword = control?.parent?.get('newPassword')?.value;\r\n return !value || !newPassword || value === newPassword;\r\n }, this.translocoService.translate('users-groups.passwords-must-match')),\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n ngOnInit(): void {\r\n this.resetPasswordFormControl.setValue({\r\n displayName: this.user()?.displayName || '',\r\n newPassword: '',\r\n confirmPassword: '',\r\n });\r\n }\r\n\r\n onSubmit() {\r\n const payload = {\r\n userName: this.user()?.userName,\r\n newPassword: this.resetPasswordFormControl.value?.newPassword,\r\n };\r\n this.facade.resetUserPassword(this.user()?.userName, payload).subscribe({\r\n next: () => {\r\n this.ref.close(true);\r\n },\r\n error: () => {},\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <form class=\"p-4\" [class]=\"modal.contentClass\">\r\n <mt-dynamic-form\r\n [formConfig]=\"resetPasswordFormConfig()\"\r\n [formControl]=\"resetPasswordFormControl\"\r\n />\r\n </form>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n [disabled]=\"passwordResetLoading()\"\r\n (click)=\"ref.close(false)\"\r\n />\r\n <mt-button\r\n [label]=\"'save' | transloco\"\r\n (click)=\"onSubmit()\"\r\n [loading]=\"passwordResetLoading()\"\r\n [disabled]=\"!this.resetPasswordFormControl.valid\"\r\n />\r\n </div>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpContext } from '@angular/common/http';\r\nimport {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n OnInit,\r\n signal,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { REQUEST_CONTEXT } from '@masterteam/components';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { SecureImagePipe } from '@masterteam/components/upload-field';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { UsersGroupsFacade } from '../../../../../public-api';\r\n\r\ninterface LinkedGroupView {\r\n id: string | number | undefined;\r\n name: string;\r\n isActivated: boolean;\r\n membersCount: number;\r\n}\r\n\r\ninterface RoleView {\r\n id: string;\r\n name: string;\r\n moduleType: string;\r\n}\r\n\r\ninterface PermissionView {\r\n id: number;\r\n name: string;\r\n command: string;\r\n moduleType: string;\r\n}\r\n\r\ninterface AccessibilityView {\r\n id: number;\r\n name: string;\r\n category: string;\r\n}\r\n\r\ntype SummaryTab = 'groups' | 'permissions' | 'roles' | 'accessibilities';\r\n\r\n@Component({\r\n selector: 'mt-user-linked-groups',\r\n templateUrl: './user-linked-groups.html',\r\n styleUrls: ['./user-linked-groups.css'],\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslocoDirective,\r\n SkeletonModule,\r\n Icon,\r\n Tabs,\r\n Avatar,\r\n SecureImagePipe,\r\n ],\r\n})\r\nexport default class UserLinkedGroups implements OnInit {\r\n private readonly facade = inject(UsersGroupsFacade);\r\n private readonly translocoService = inject(TranslocoService);\r\n readonly ref: ModalRef = inject(ModalRef);\r\n\r\n user = input<any>(null);\r\n\r\n readonly context = new HttpContext().set(REQUEST_CONTEXT, {\r\n useBaseUrl: true,\r\n });\r\n\r\n loading = this.facade.isLoadingUserSummary;\r\n private readonly summary = this.facade.userSummary;\r\n\r\n readonly activeTab = signal<SummaryTab>('groups');\r\n\r\n readonly groups = computed<LinkedGroupView[]>(() => {\r\n const lang = this.lang();\r\n return (this.summary()?.groups ?? []).map((group) => ({\r\n id: group.id,\r\n name: this.resolveTranslated(group.name, lang),\r\n isActivated: !!group.isActivated,\r\n membersCount: group.membersCount ?? 0,\r\n }));\r\n });\r\n\r\n readonly roles = computed<RoleView[]>(() => {\r\n const lang = this.lang();\r\n return (this.summary()?.roles ?? []).map((role) => ({\r\n id: role.id,\r\n name: this.resolveTranslated(role.name, lang),\r\n moduleType: role.moduleType ?? '',\r\n }));\r\n });\r\n\r\n readonly permissions = computed<PermissionView[]>(() => {\r\n const lang = this.lang();\r\n return (this.summary()?.permissions ?? []).map((permission) => ({\r\n id: permission.id,\r\n name: this.resolveTranslated(permission.name, lang),\r\n command: permission.command ?? '',\r\n moduleType: permission.moduleType ?? '',\r\n }));\r\n });\r\n\r\n readonly accessibilities = computed<AccessibilityView[]>(() => {\r\n const lang = this.lang();\r\n return (this.summary()?.accessibilities ?? []).map((accessibility) => ({\r\n id: accessibility.id,\r\n name: this.resolveTranslated(accessibility.moduleName, lang),\r\n category: this.resolveTranslated(accessibility.name, lang),\r\n }));\r\n });\r\n\r\n readonly userImage = computed<string>(\r\n () => this.summary()?.user?.image ?? this.user()?.image ?? '',\r\n );\r\n readonly userDisplayName = computed<string>(\r\n () => this.summary()?.user?.displayName ?? this.user()?.displayName ?? '',\r\n );\r\n\r\n readonly tabs = computed(() => [\r\n {\r\n label: `${this.translocoService.translate('users-groups.groups')} (${this.groups().length})`,\r\n value: 'groups' as SummaryTab,\r\n },\r\n {\r\n label: `${this.translocoService.translate('users-groups.permissions')} (${this.permissions().length})`,\r\n value: 'permissions' as SummaryTab,\r\n },\r\n {\r\n label: `${this.translocoService.translate('users-groups.roles')} (${this.roles().length})`,\r\n value: 'roles' as SummaryTab,\r\n },\r\n {\r\n label: `${this.translocoService.translate('users-groups.accessibilities')} (${this.accessibilities().length})`,\r\n value: 'accessibilities' as SummaryTab,\r\n },\r\n ]);\r\n\r\n readonly isEmpty = computed(() => {\r\n if (this.loading()) return false;\r\n switch (this.activeTab()) {\r\n case 'groups':\r\n return this.groups().length === 0;\r\n case 'permissions':\r\n return this.permissions().length === 0;\r\n case 'roles':\r\n return this.roles().length === 0;\r\n case 'accessibilities':\r\n return this.accessibilities().length === 0;\r\n }\r\n });\r\n\r\n ngOnInit(): void {\r\n const userName = this.user()?.userName;\r\n if (!userName) return;\r\n this.facade.getUserSummary(userName);\r\n }\r\n\r\n private lang(): 'en' | 'ar' {\r\n return this.translocoService.getActiveLang() as 'en' | 'ar';\r\n }\r\n\r\n private resolveTranslated(value: unknown, lang: 'en' | 'ar'): string {\r\n if (!value) return '';\r\n\r\n if (typeof value === 'object') {\r\n const v = value as Record<string, string | undefined>;\r\n return v['display'] || v[lang] || v['en'] || v['ar'] || '';\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const trimmed = value.trim();\r\n if (trimmed.startsWith('{') && trimmed.endsWith('}')) {\r\n try {\r\n const parsed = JSON.parse(trimmed) as Record<string, string>;\r\n return parsed[lang] || parsed['en'] || parsed['ar'] || '';\r\n } catch {\r\n return value;\r\n }\r\n }\r\n return value;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div class=\"flex flex-col gap-4 p-4 max-h-[75vh] overflow-auto\">\r\n <div class=\"flex items-center min-w-0\">\r\n <mt-tabs\r\n class=\"flex-1 min-w-0\"\r\n [options]=\"tabs()\"\r\n [(active)]=\"activeTab\"\r\n mode=\"underline\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n ></mt-tabs>\r\n <div\r\n class=\"flex items-center gap-2 pb-2 px-2 shrink-0 border-b border-slate-200 dark:border-slate-700\"\r\n >\r\n <mt-avatar\r\n [image]=\"\r\n userImage()\r\n ? $any(userImage() | secureImage: true : context : 'avatar/')\r\n : ''\r\n \"\r\n [icon]=\"'user.user-01'\"\r\n styleClass=\"w-8! h-8! text-lg! text-gray-600! bg-surface-300!\"\r\n ></mt-avatar>\r\n <div class=\"flex flex-col min-w-0\">\r\n <span\r\n class=\"text-sm font-medium text-slate-600 dark:text-slate-100 truncate\"\r\n [title]=\"userDisplayName()\"\r\n >\r\n {{ userDisplayName() }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n @if (loading()) {\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\r\n <p-skeleton height=\"4rem\"></p-skeleton>\r\n <p-skeleton height=\"4rem\"></p-skeleton>\r\n <p-skeleton height=\"4rem\"></p-skeleton>\r\n <p-skeleton height=\"4rem\"></p-skeleton>\r\n </div>\r\n } @else if (isEmpty()) {\r\n <div\r\n class=\"flex flex-col items-center justify-center text-center py-10 gap-2 text-slate-500 dark:text-slate-400\"\r\n >\r\n <mt-icon icon=\"general.link-broken-01\" class=\"text-2xl\" />\r\n <span class=\"text-sm font-medium\">\r\n @switch (activeTab()) {\r\n @case (\"groups\") {\r\n {{ t(\"no-linked-groups\") }}\r\n }\r\n @case (\"permissions\") {\r\n {{ t(\"no-permissions\") }}\r\n }\r\n @case (\"roles\") {\r\n {{ t(\"no-roles\") }}\r\n }\r\n @case (\"accessibilities\") {\r\n {{ t(\"no-accessibilities\") }}\r\n }\r\n }\r\n </span>\r\n </div>\r\n } @else {\r\n @switch (activeTab()) {\r\n @case (\"groups\") {\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3 pb-3\">\r\n @for (group of groups(); track group.id) {\r\n <div\r\n class=\"flex flex-col gap-2 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800 p-3 hover:shadow-sm transition-shadow\"\r\n >\r\n <div class=\"flex items-start justify-between gap-2\">\r\n <div class=\"flex items-center gap-3 min-w-0\">\r\n <span\r\n class=\"inline-flex items-center justify-center rounded-md bg-indigo-50 dark:bg-indigo-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"user.users-01\"\r\n class=\"text-indigo-600 dark:text-indigo-300 text-xl\"\r\n />\r\n </span>\r\n <div class=\"flex flex-col min-w-0\">\r\n <span\r\n class=\"text-md text-slate-800 dark:text-slate-100 truncate\"\r\n [title]=\"group.name\"\r\n >\r\n {{ group.name }}\r\n </span>\r\n <span\r\n class=\"inline-flex items-center gap-1 text-xs text-slate-500 dark:text-slate-400\"\r\n >\r\n <mt-icon icon=\"user.users-01\" class=\"text-sm\" />\r\n {{ group.membersCount }} {{ t(\"users-number\") }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n @if (group.isActivated) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-emerald-50 dark:bg-emerald-900/30 px-2 py-0.5 shrink-0\"\r\n >\r\n <span\r\n class=\"w-1.5 h-1.5 rounded-full bg-emerald-500\"\r\n ></span>\r\n <span\r\n class=\"text-emerald-700 dark:text-emerald-200 text-xs font-medium\"\r\n >\r\n {{ t(\"active\") }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-slate-100 dark:bg-slate-700 px-2 py-0.5 shrink-0\"\r\n >\r\n <span\r\n class=\"w-1.5 h-1.5 rounded-full bg-slate-400\"\r\n ></span>\r\n <span\r\n class=\"text-slate-600 dark:text-slate-200 text-xs font-medium\"\r\n >\r\n {{ t(\"inactive\") }}\r\n </span>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case (\"permissions\") {\r\n <div\r\n class=\"flex flex-col divide-y divide-slate-100 dark:divide-slate-700 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800\"\r\n >\r\n @for (permission of permissions(); track permission.id) {\r\n <div class=\"flex items-center gap-3 p-3\">\r\n <span\r\n class=\"inline-flex items-center justify-center rounded-md bg-amber-50 dark:bg-amber-900/30 p-2 shrink-0\"\r\n >\r\n <mt-icon\r\n icon=\"security.shield-tick\"\r\n class=\"text-amber-600 dark:text-amber-300 text-lg\"\r\n />\r\n </span>\r\n <div class=\"flex flex-col min-w-0 flex-1\">\r\n <span\r\n class=\"text-sm font-medium text-slate-800 dark:text-slate-100 truncate\"\r\n [title]=\"permission.name\"\r\n >\r\n {{ permission.name }}\r\n </span>\r\n <span\r\n class=\"text-xs text-slate-500 dark:text-slate-400 truncate\"\r\n [title]=\"permission.command\"\r\n >\r\n {{ permission.command }}\r\n </span>\r\n </div>\r\n @if (permission.moduleType) {\r\n <span\r\n class=\"inline-flex items-center rounded-md bg-slate-50 dark:bg-slate-900/30 px-2 py-0.5 shrink-0 text-xs text-slate-600 dark:text-slate-300 font-medium\"\r\n >\r\n {{ permission.moduleType }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case (\"roles\") {\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3 pb-3\">\r\n @for (role of roles(); track role.id) {\r\n <div\r\n class=\"flex items-center gap-3 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800 p-3\"\r\n >\r\n <span\r\n class=\"inline-flex items-center justify-center rounded-md bg-violet-50 dark:bg-violet-900/30 p-2 shrink-0\"\r\n >\r\n <mt-icon\r\n icon=\"user.user-check-01\"\r\n class=\"text-violet-600 dark:text-violet-300 text-xl\"\r\n />\r\n </span>\r\n <div class=\"flex flex-col min-w-0 flex-1\">\r\n <span\r\n class=\"text-md text-slate-800 dark:text-slate-100 truncate\"\r\n [title]=\"role.name\"\r\n >\r\n {{ role.name }}\r\n </span>\r\n @if (role.moduleType) {\r\n <span class=\"text-xs text-slate-500 dark:text-slate-400\">\r\n {{ role.moduleType }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case (\"accessibilities\") {\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3 pb-3\">\r\n @for (accessibility of accessibilities(); track accessibility.id) {\r\n <div\r\n class=\"flex items-center gap-3 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800 p-3\"\r\n >\r\n <span\r\n class=\"inline-flex items-center justify-center rounded-md bg-sky-50 dark:bg-sky-900/30 p-2 shrink-0\"\r\n >\r\n <mt-icon\r\n icon=\"security.lock-unlocked-01\"\r\n class=\"text-sky-600 dark:text-sky-300 text-xl\"\r\n />\r\n </span>\r\n <div class=\"flex flex-col min-w-0 flex-1\">\r\n <span\r\n class=\"text-md text-slate-800 dark:text-slate-100 truncate\"\r\n [title]=\"accessibility.name\"\r\n >\r\n {{ accessibility.name }}\r\n </span>\r\n @if (accessibility.category) {\r\n <span class=\"text-xs text-slate-500 dark:text-slate-400\">\r\n {{ accessibility.category }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\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 { Icon } from '@masterteam/icons';\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\nimport ResetPasswordForm from './reset-password-form/reset-password-form';\r\nimport UserLinkedGroups from './user-linked-groups/user-linked-groups';\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: [\r\n CommonModule,\r\n SkeletonModule,\r\n Table,\r\n Avatar,\r\n Icon,\r\n TranslocoDirective,\r\n ],\r\n})\r\nexport default class Users implements OnInit {\r\n typeCol = viewChild.required<TemplateRef<any>>('typeCol');\r\n applicationLinkCol =\r\n viewChild.required<TemplateRef<any>>('applicationLinkCol');\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 'notLinked':\r\n return all.filter((user) => !this.isLinkedToCurrentApplication(user));\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 label: this.translocoService.translate('users-groups.not-linked'),\r\n value: 'notLinked',\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 linkingRowIds = signal<any[]>([]);\r\n rowActions = signal<TableAction[]>([\r\n {\r\n icon: 'general.link-01',\r\n tooltip: this.translocoService.translate('users-groups.linked-groups'),\r\n color: 'secondary',\r\n action: (row: any) => {\r\n this.openLinkedGroupsDialog(row);\r\n },\r\n hidden: (row: any) => !this.isLinkedToCurrentApplication(row),\r\n },\r\n {\r\n icon: 'security.key-01',\r\n tooltip: this.translocoService.translate('users-groups.reset-password'),\r\n color: 'secondary',\r\n action: (row: any) => {\r\n this.addResetPasswordDialog(row);\r\n },\r\n hidden: (row: any) =>\r\n !row.isExternal || !this.isLinkedToCurrentApplication(row),\r\n },\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) =>\r\n !row.isExternal || !this.isLinkedToCurrentApplication(row),\r\n },\r\n {\r\n icon: 'user.user-plus-01',\r\n tooltip: this.translocoService.translate(\r\n 'users-groups.link-to-application',\r\n ),\r\n color: 'success',\r\n variant: 'outlined',\r\n action: (row: any) => {\r\n this.linkUserToApplication(row);\r\n },\r\n hidden: (row: any) => this.isLinkedToCurrentApplication(row),\r\n confirmation: {\r\n type: 'popup',\r\n header: this.translocoService.translate(\r\n 'users-groups.link-confirm-header',\r\n ),\r\n message: this.translocoService.translate(\r\n 'users-groups.link-confirm-message',\r\n ),\r\n icon: 'user.user-plus-01',\r\n acceptLabel: this.translocoService.translate(\r\n 'users-groups.link-to-application',\r\n ),\r\n rejectLabel: this.translocoService.translate('users-groups.cancel'),\r\n acceptButton: {\r\n severity: 'success',\r\n },\r\n },\r\n loading: (row: any) => this.linkingRowIds().includes(row.userName),\r\n },\r\n {\r\n icon: 'general.trash-01',\r\n tooltip: this.translocoService.translate(\r\n 'users-groups.unlink-from-application',\r\n ),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row: any) => {\r\n this.unlinkUserFromApplication(row);\r\n },\r\n hidden: (row: any) => !this.isLinkedToCurrentApplication(row),\r\n confirmation: {\r\n type: 'popup',\r\n header: this.translocoService.translate(\r\n 'users-groups.unlink-confirm-header',\r\n ),\r\n message: this.translocoService.translate(\r\n 'users-groups.unlink-confirm-message',\r\n ),\r\n icon: 'general.link-broken-01',\r\n acceptLabel: this.translocoService.translate(\r\n 'users-groups.unlink-from-application',\r\n ),\r\n rejectLabel: this.translocoService.translate('users-groups.cancel'),\r\n acceptButton: {\r\n severity: 'danger',\r\n },\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: '{{record}}',\r\n label: this.translocoService.translate('users-groups.user'),\r\n type: 'user',\r\n filterConfig: {\r\n type: 'select',\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: 'isLinkedToCurrentApplication',\r\n label: this.translocoService.translate('users-groups.application-link'),\r\n type: 'custom',\r\n customCellTpl: this.applicationLinkCol(),\r\n filterConfig: {\r\n type: 'select',\r\n label: this.translocoService.translate('users-groups.application-link'),\r\n options: [\r\n {\r\n label: this.translocoService.translate('users-groups.linked'),\r\n value: true,\r\n },\r\n {\r\n label: this.translocoService.translate('users-groups.not-linked'),\r\n value: false,\r\n },\r\n ],\r\n },\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.actualValue',\r\n label: this.translocoService.translate('users-groups.last-seen'),\r\n type: 'dateTime',\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 isLinkedToCurrentApplication(user: any): boolean {\r\n return user?.isLinkedToCurrentApplication !== false;\r\n }\r\n\r\n linkUserToApplication(user: any): void {\r\n const userName = user?.userName;\r\n if (!userName) {\r\n return;\r\n }\r\n\r\n this.linkingRowIds.update((ids) => [...ids, userName]);\r\n this.facade\r\n .linkUserToApplication(userName)\r\n .pipe(\r\n finalize(() => {\r\n this.linkingRowIds.update((ids) =>\r\n ids.filter((id) => id !== userName),\r\n );\r\n }),\r\n )\r\n .subscribe();\r\n }\r\n\r\n unlinkUserFromApplication(user: any): void {\r\n const userName = user?.userName;\r\n if (!userName || !this.isLinkedToCurrentApplication(user)) {\r\n return;\r\n }\r\n\r\n this.deletingRowIds.update((ids) => [...ids, userName]);\r\n this.facade\r\n .deleteUser(userName)\r\n .pipe(\r\n finalize(() => {\r\n this.deletingRowIds.update((ids) =>\r\n ids.filter((id) => id !== userName),\r\n );\r\n }),\r\n )\r\n .subscribe();\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 addResetPasswordDialog(user: any) {\r\n this.modal.openModal(ResetPasswordForm, 'drawer', {\r\n header: this.translocoService.translate('users-groups.reset-password'),\r\n styleClass: '!w-[30rem] !absolute !shadow-none',\r\n appendTo: 'page-content',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: {\r\n user,\r\n },\r\n });\r\n }\r\n\r\n openLinkedGroupsDialog(user: any) {\r\n this.modal.openModal(UserLinkedGroups, 'dialog', {\r\n header: this.translocoService.translate('users-groups.summary'),\r\n styleClass: '!w-[50rem]',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: {\r\n 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 @if (row.isExternal) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-slate-50 dark:bg-slate-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"general.link-external-02\"\r\n class=\"text-slate-600 dark:text-slate-300 text-sm\"\r\n />\r\n <span class=\"text-slate-700 dark:text-slate-200 text-xs font-medium\">\r\n {{ t(\"external\") }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-emerald-50 dark:bg-emerald-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"user.users-01\"\r\n class=\"text-emerald-600 dark:text-emerald-300 text-sm\"\r\n />\r\n <span\r\n class=\"text-emerald-700 dark:text-emerald-200 text-xs font-medium\"\r\n >\r\n {{ t(\"internal\") }}\r\n </span>\r\n </span>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #applicationLinkCol let-row>\r\n @if (isLinkedToCurrentApplication(row)) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-emerald-50 dark:bg-emerald-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"user.user-check-01\"\r\n class=\"text-emerald-600 dark:text-emerald-300 text-sm\"\r\n />\r\n <span\r\n class=\"text-emerald-700 dark:text-emerald-200 text-xs font-medium\"\r\n >\r\n {{ t(\"linked\") }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-amber-50 dark:bg-amber-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"general.link-broken-01\"\r\n class=\"text-amber-600 dark:text-amber-300 text-sm\"\r\n />\r\n <span class=\"text-amber-700 dark:text-amber-200 text-xs font-medium\">\r\n {{ t(\"not-linked\") }}\r\n </span>\r\n </span>\r\n }\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 storageKey=\"users-groups-users-table\"\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) => 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?.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 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 noCard\r\n [data]=\"selectedGroup()?.members || []\"\r\n [columns]=\"tableColumns()\"\r\n [rowActions]=\"rowActions()\"\r\n storageKey=\"users-groups-group-members-table\"\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]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n [disabled]=\"createUpdateGroupLoading()\"\r\n (click)=\"ref.close(false)\"\r\n />\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 { Component, inject, linkedSignal, OnInit, signal } 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 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.display',\r\n label: this.translocoService.translate('users-groups.group'),\r\n type: 'text',\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 <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 storageKey=\"users-groups-groups-table\"\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/reset-password-form/reset-password-form.ts","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/users/reset-password-form/reset-password-form.html","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/users/user-linked-groups/user-linked-groups.ts","../../../../packages/masterteam/users-groups/src/lib/users-groups/pages/users/user-linked-groups/user-linked-groups.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, ResetUserPasswordPayload } 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\n\r\nexport class LinkUserToApplication {\r\n static readonly type = '[UsersGroups] Link User To Application';\r\n constructor(public userName: string | number) {}\r\n}\r\n\r\nexport class GetUserSummary {\r\n static readonly type = '[UsersGroups] Get User Summary';\r\n constructor(public userName: string) {}\r\n}\r\nexport class ResetUserPassword {\r\n static readonly type = '[UsersGroups] Reset User Password';\r\n constructor(\r\n public id: string | number,\r\n public payload: ResetUserPasswordPayload,\r\n ) {}\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 isLinkedToCurrentApplication?: 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 Role {\r\n id: string;\r\n key?: string;\r\n name?: TranslatedField | string;\r\n moduleId?: number;\r\n moduleType?: string;\r\n sourceId?: number;\r\n applicationId?: number;\r\n extraInfo?: any[];\r\n}\r\n\r\nexport interface Permission {\r\n id: number;\r\n name?: string | TranslatedField;\r\n moduleId?: number;\r\n applicationId?: number;\r\n moduleType?: string;\r\n command?: string;\r\n}\r\n\r\nexport interface Accessibility {\r\n id: number;\r\n moduleKey?: string;\r\n moduleName?: TranslatedField | string;\r\n category?: string;\r\n name?: TranslatedField | string;\r\n enableMFACheck?: boolean;\r\n createdAt?: ApiDateValue;\r\n applicationId?: number;\r\n groups?: any[];\r\n}\r\n\r\nexport interface UserSummary {\r\n user?: User | null;\r\n groups: Group[];\r\n roles: Role[];\r\n permissions: Permission[];\r\n accessibilities: Accessibility[];\r\n groupsCount?: number;\r\n rolesCount?: number;\r\n permissionsCount?: number;\r\n accessibilitiesCount?: 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 LinkUserToApplication = 'linkUserToApplication',\r\n GetUserSummary = 'getUserSummary',\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 ResetUserPassword = 'resetUserPassword',\r\n}\r\n\r\nexport interface UsersGroupsStateModel extends LoadingStateShape<UsersGroupsActionKey> {\r\n users: User[];\r\n selectedUser: User | null;\r\n userSummary: UserSummary | null;\r\n groups: Group[];\r\n selectedGroup: Group | null;\r\n}\r\n\r\nexport interface ResetUserPasswordPayload {\r\n userName: string;\r\n newPassword: string;\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 GetUserSummary,\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 ResetUserPassword,\r\n LinkUserToApplication,\r\n} from './users-groups.actions';\r\nimport {\r\n User,\r\n Group,\r\n UserSummary,\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 userSummary: 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 private encodeUserName(userName: string | number): string {\r\n return encodeURIComponent(String(userName));\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 getUserSummary(state: UsersGroupsStateModel): UserSummary | null {\r\n return state.userSummary;\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 encodedUserName = this.encodeUserName(userName ?? '');\r\n const req$ = this.http.get<Response<User>>(\r\n `Identity/users/${encodedUserName}?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 ?? 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 updatedGroup = response.data;\r\n if (!updatedGroup) return {};\r\n\r\n return {\r\n selectedGroup: {\r\n ...(state.selectedGroup ?? {}),\r\n ...updatedGroup,\r\n },\r\n groups: this.adapter.upsertOne(\r\n state.groups as any[],\r\n updatedGroup,\r\n 'id' as any,\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 encodedUserName = this.encodeUserName(id ?? '');\r\n const req$ = this.http.put<Response<User>>(\r\n `Identity/users/${encodedUserName}`,\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 encodedUserName = this.encodeUserName(userName);\r\n const userNameKey = String(userName);\r\n const req$ = this.http.delete<Response<void>>(\r\n `Identity/users/${encodedUserName}`,\r\n {\r\n context: this.context,\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.DeleteUser,\r\n request$: req$,\r\n onSuccess: (_response, state) => ({\r\n users: this.adapter.updateOne(\r\n state.users as any[],\r\n userNameKey,\r\n { isLinkedToCurrentApplication: false },\r\n 'userName' as any,\r\n ),\r\n }),\r\n });\r\n }\r\n\r\n @Action(LinkUserToApplication)\r\n linkUserToApplication(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { userName }: LinkUserToApplication,\r\n ) {\r\n const encodedUserName = this.encodeUserName(userName);\r\n const userNameKey = String(userName);\r\n const req$ = this.http.put<Response<User | null>>(\r\n `Identity/users/${encodedUserName}/application/link`,\r\n {},\r\n {\r\n context: this.context,\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.LinkUserToApplication,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const linkedUser = {\r\n ...(state.users.find((user) => user.userName === userNameKey) ?? {}),\r\n ...(response.data ?? {}),\r\n userName: userNameKey,\r\n isLinkedToCurrentApplication: true,\r\n };\r\n\r\n return {\r\n users: this.adapter.upsertOne(\r\n state.users as any[],\r\n linkedUser,\r\n 'userName' as any,\r\n ),\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(GetUserSummary)\r\n getUserSummary(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { userName }: GetUserSummary,\r\n ) {\r\n const encodedUserName = this.encodeUserName(userName);\r\n const req$ = this.http.get<Response<UserSummary>>(\r\n `identity/users/${encodedUserName}/summary`,\r\n { context: this.context },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.GetUserSummary,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n userSummary: response.data ?? null,\r\n }),\r\n });\r\n }\r\n\r\n @Action(ResetUserPassword)\r\n resetUserPassword(\r\n ctx: StateContext<UsersGroupsStateModel>,\r\n { id, payload }: ResetUserPassword,\r\n ) {\r\n const encodedUserName = this.encodeUserName(id);\r\n const req$ = this.http.put<Response<void>>(\r\n `Identity/users/${encodedUserName}/password/reset`,\r\n payload,\r\n {\r\n context: this.context,\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: UsersGroupsActionKey.ResetUserPassword,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n });\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 GetUserSummary,\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 ResetUserPassword,\r\n LinkUserToApplication,\r\n} from './users-groups.actions';\r\nimport {\r\n User,\r\n Group,\r\n UsersGroupsActionKey,\r\n ResetUserPasswordPayload,\r\n} 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 userSummary = select(UsersGroupsState.getUserSummary);\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 readonly isLinkingUserToApplication = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.LinkUserToApplication),\r\n );\r\n readonly isLoadingUserSummary = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.GetUserSummary),\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 readonly isResettingPassword = computed(() =>\r\n this.loadingActive().includes(UsersGroupsActionKey.ResetUserPassword),\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 linkUserToApplication(userName: string | number) {\r\n return this.store.dispatch(new LinkUserToApplication(userName));\r\n }\r\n\r\n getUserSummary(userName: string) {\r\n return this.store.dispatch(new GetUserSummary(userName));\r\n }\r\n\r\n resetUserPassword(id: string | number, payload: ResetUserPasswordPayload) {\r\n return this.store.dispatch(new ResetUserPassword(id, payload));\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 { toSignal } from '@angular/core/rxjs-interop';\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\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 private readonly passwordPattern =\r\n '^(?=.*[A-Z])(?=.*[^a-zA-Z0-9])(?=.*[a-z])(?=.*\\\\d).{6,}$';\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 private readonly internalFormEvents = toSignal(\r\n this.internalUserFormControl.events,\r\n { initialValue: null },\r\n );\r\n private readonly externalFormEvents = toSignal(\r\n this.externalUserFormControl.events,\r\n { initialValue: null },\r\n );\r\n getUserFormLoading = this.facade.isLoadingUser;\r\n createUpdateUserLoading = this.facade.isSavingUser;\r\n isEditMode = computed(() => !!this.userForEdit()?.userName);\r\n isSubmitDisabled = computed(() => {\r\n if (this.createUpdateUserLoading()) {\r\n return true;\r\n }\r\n\r\n if (this.isEditMode()) {\r\n this.externalFormEvents();\r\n return (\r\n this.externalUserFormControl.pristine ||\r\n !this.externalUserFormControl.valid\r\n );\r\n }\r\n\r\n if (this.selectedTab() === 'internal') {\r\n this.internalFormEvents();\r\n return !this.internalUserFormControl.valid;\r\n }\r\n\r\n this.externalFormEvents();\r\n return !this.externalUserFormControl.valid;\r\n });\r\n context = new HttpContext().set(REQUEST_CONTEXT, {\r\n useBaseUrl: false,\r\n });\r\n contextGatway = 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: this.translocoService.translate('users-groups.avatar'),\r\n shape: 'circle',\r\n endPoint: 'avatar',\r\n context: this.contextGatway,\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.pattern(\r\n '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9-]+(\\\\.[a-zA-Z0-9-]+)*\\\\.[a-zA-Z]{2,}$',\r\n this.translocoService.translate('users-groups.email-invalid'),\r\n ),\r\n ],\r\n colSpan: this.fieldColSpan(),\r\n order: 3,\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: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.pattern(\r\n '^\\\\+?[0-9]{7,15}$',\r\n this.translocoService.translate('users-groups.mobile-invalid'),\r\n ),\r\n ],\r\n colSpan: this.fieldColSpan(),\r\n order: 4,\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()?.image,\r\n };\r\n this.externalUserFormControl.patchValue(data);\r\n this.externalUserFormControl.markAsPristine();\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()?.userName, 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 const passwordRules = this.translocoService.translate(\r\n 'users-groups.password-rules',\r\n );\r\n\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: 5,\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 hint: passwordRules,\r\n validators: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.pattern(this.passwordPattern, passwordRules),\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 hint: passwordRules,\r\n validators: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.pattern(this.passwordPattern, passwordRules),\r\n ValidatorConfig.custom((value, control) => {\r\n const password = control?.parent?.get('password')?.value;\r\n return !value || !password || value === password;\r\n }, this.translocoService.translate('users-groups.passwords-must-match')),\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","<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]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n [disabled]=\"createUpdateUserLoading()\"\r\n (click)=\"ref.close(false)\"\r\n />\r\n <mt-button\r\n [label]=\"selectedUser() ? ('save' | transloco) : ('add' | transloco)\"\r\n (click)=\"onSubmit()\"\r\n [loading]=\"createUpdateUserLoading()\"\r\n [disabled]=\"isSubmitDisabled()\"\r\n />\r\n </div>\r\n</ng-container>\r\n","import { Component, computed, inject, input, OnInit } from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\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 { DynamicFormConfig, ValidatorConfig } from '@masterteam/components';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { DialogService, ModalRef } from '@masterteam/components/dialog';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { UsersGroupsFacade } from '../../../../../public-api';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'mt-reset-password-form',\r\n templateUrl: './reset-password-form.html',\r\n styleUrls: ['./reset-password-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 ],\r\n providers: [DialogService],\r\n})\r\nexport default class ResetPasswordForm implements OnInit {\r\n private readonly passwordPattern =\r\n '^(?=.*[A-Z])(?=.*[^a-zA-Z0-9])(?=.*[a-z])(?=.*\\\\d).{6,}$';\r\n modal: ModalService = inject(ModalService);\r\n ref: ModalRef = inject(ModalRef);\r\n translocoService: TranslocoService = inject(TranslocoService);\r\n facade: UsersGroupsFacade = inject(UsersGroupsFacade);\r\n\r\n user = input<any>(null);\r\n\r\n passwordResetLoading = this.facade.isResettingPassword;\r\n\r\n resetPasswordFormControl = new FormControl();\r\n resetPasswordFormConfig = computed<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'resetPasswordFormConfig',\r\n type: 'header',\r\n order: 1,\r\n fields: [\r\n {\r\n key: 'displayName',\r\n inputType: 'text',\r\n disabled: true,\r\n label: this.translocoService.translate('users-groups.user'),\r\n value: this.user()?.displayName || '',\r\n },\r\n {\r\n key: 'newPassword',\r\n inputType: 'password',\r\n label: this.translocoService.translate('users-groups.new-password'),\r\n hint: this.translocoService.translate(\r\n 'users-groups.password-rules',\r\n ),\r\n validators: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.pattern(\r\n this.passwordPattern,\r\n this.translocoService.translate('users-groups.password-rules'),\r\n ),\r\n ],\r\n },\r\n {\r\n key: 'confirmPassword',\r\n inputType: 'password',\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 hint: this.translocoService.translate(\r\n 'users-groups.password-rules',\r\n ),\r\n validators: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.pattern(\r\n this.passwordPattern,\r\n this.translocoService.translate('users-groups.password-rules'),\r\n ),\r\n ValidatorConfig.custom((value, control) => {\r\n const newPassword = control?.parent?.get('newPassword')?.value;\r\n return !value || !newPassword || value === newPassword;\r\n }, this.translocoService.translate('users-groups.passwords-must-match')),\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n ngOnInit(): void {\r\n this.resetPasswordFormControl.setValue({\r\n displayName: this.user()?.displayName || '',\r\n newPassword: '',\r\n confirmPassword: '',\r\n });\r\n }\r\n\r\n onSubmit() {\r\n const payload = {\r\n userName: this.user()?.userName,\r\n newPassword: this.resetPasswordFormControl.value?.newPassword,\r\n };\r\n this.facade.resetUserPassword(this.user()?.userName, payload).subscribe({\r\n next: () => {\r\n this.ref.close(true);\r\n },\r\n error: () => {},\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <form class=\"p-4\" [class]=\"modal.contentClass\">\r\n <mt-dynamic-form\r\n [formConfig]=\"resetPasswordFormConfig()\"\r\n [formControl]=\"resetPasswordFormControl\"\r\n />\r\n </form>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n [disabled]=\"passwordResetLoading()\"\r\n (click)=\"ref.close(false)\"\r\n />\r\n <mt-button\r\n [label]=\"'save' | transloco\"\r\n (click)=\"onSubmit()\"\r\n [loading]=\"passwordResetLoading()\"\r\n [disabled]=\"!this.resetPasswordFormControl.valid\"\r\n />\r\n </div>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpContext } from '@angular/common/http';\r\nimport {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n OnInit,\r\n signal,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { REQUEST_CONTEXT } from '@masterteam/components';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { SecureImagePipe } from '@masterteam/components/upload-field';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { UsersGroupsFacade } from '../../../../../public-api';\r\n\r\ninterface LinkedGroupView {\r\n id: string | number | undefined;\r\n name: string;\r\n isActivated: boolean;\r\n membersCount: number;\r\n}\r\n\r\ninterface RoleView {\r\n id: string;\r\n name: string;\r\n moduleType: string;\r\n}\r\n\r\ninterface PermissionView {\r\n id: number;\r\n name: string;\r\n command: string;\r\n moduleType: string;\r\n}\r\n\r\ninterface AccessibilityView {\r\n id: number;\r\n name: string;\r\n category: string;\r\n}\r\n\r\ntype SummaryTab = 'groups' | 'permissions' | 'roles' | 'accessibilities';\r\n\r\n@Component({\r\n selector: 'mt-user-linked-groups',\r\n templateUrl: './user-linked-groups.html',\r\n styleUrls: ['./user-linked-groups.css'],\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslocoDirective,\r\n SkeletonModule,\r\n Icon,\r\n Tabs,\r\n Avatar,\r\n SecureImagePipe,\r\n ],\r\n})\r\nexport default class UserLinkedGroups implements OnInit {\r\n private readonly facade = inject(UsersGroupsFacade);\r\n private readonly translocoService = inject(TranslocoService);\r\n readonly ref: ModalRef = inject(ModalRef);\r\n\r\n user = input<any>(null);\r\n\r\n readonly context = new HttpContext().set(REQUEST_CONTEXT, {\r\n useBaseUrl: true,\r\n });\r\n\r\n loading = this.facade.isLoadingUserSummary;\r\n private readonly summary = this.facade.userSummary;\r\n\r\n readonly activeTab = signal<SummaryTab>('groups');\r\n\r\n readonly groups = computed<LinkedGroupView[]>(() => {\r\n const lang = this.lang();\r\n return (this.summary()?.groups ?? []).map((group) => ({\r\n id: group.id,\r\n name: this.resolveTranslated(group.name, lang),\r\n isActivated: !!group.isActivated,\r\n membersCount: group.membersCount ?? 0,\r\n }));\r\n });\r\n\r\n readonly roles = computed<RoleView[]>(() => {\r\n const lang = this.lang();\r\n return (this.summary()?.roles ?? []).map((role) => ({\r\n id: role.id,\r\n name: this.resolveTranslated(role.name, lang),\r\n moduleType: role.moduleType ?? '',\r\n }));\r\n });\r\n\r\n readonly permissions = computed<PermissionView[]>(() => {\r\n const lang = this.lang();\r\n return (this.summary()?.permissions ?? []).map((permission) => ({\r\n id: permission.id,\r\n name: this.resolveTranslated(permission.name, lang),\r\n command: permission.command ?? '',\r\n moduleType: permission.moduleType ?? '',\r\n }));\r\n });\r\n\r\n readonly accessibilities = computed<AccessibilityView[]>(() => {\r\n const lang = this.lang();\r\n return (this.summary()?.accessibilities ?? []).map((accessibility) => ({\r\n id: accessibility.id,\r\n name: this.resolveTranslated(accessibility.moduleName, lang),\r\n category: this.resolveTranslated(accessibility.name, lang),\r\n }));\r\n });\r\n\r\n readonly userImage = computed<string>(\r\n () => this.summary()?.user?.image ?? this.user()?.image ?? '',\r\n );\r\n readonly userDisplayName = computed<string>(\r\n () => this.summary()?.user?.displayName ?? this.user()?.displayName ?? '',\r\n );\r\n\r\n readonly tabs = computed(() => [\r\n {\r\n label: `${this.translocoService.translate('users-groups.groups')} (${this.groups().length})`,\r\n value: 'groups' as SummaryTab,\r\n },\r\n {\r\n label: `${this.translocoService.translate('users-groups.permissions')} (${this.permissions().length})`,\r\n value: 'permissions' as SummaryTab,\r\n },\r\n {\r\n label: `${this.translocoService.translate('users-groups.roles')} (${this.roles().length})`,\r\n value: 'roles' as SummaryTab,\r\n },\r\n {\r\n label: `${this.translocoService.translate('users-groups.accessibilities')} (${this.accessibilities().length})`,\r\n value: 'accessibilities' as SummaryTab,\r\n },\r\n ]);\r\n\r\n readonly isEmpty = computed(() => {\r\n if (this.loading()) return false;\r\n switch (this.activeTab()) {\r\n case 'groups':\r\n return this.groups().length === 0;\r\n case 'permissions':\r\n return this.permissions().length === 0;\r\n case 'roles':\r\n return this.roles().length === 0;\r\n case 'accessibilities':\r\n return this.accessibilities().length === 0;\r\n }\r\n });\r\n\r\n ngOnInit(): void {\r\n const userName = this.user()?.userName;\r\n if (!userName) return;\r\n this.facade.getUserSummary(userName);\r\n }\r\n\r\n private lang(): 'en' | 'ar' {\r\n return this.translocoService.getActiveLang() as 'en' | 'ar';\r\n }\r\n\r\n private resolveTranslated(value: unknown, lang: 'en' | 'ar'): string {\r\n if (!value) return '';\r\n\r\n if (typeof value === 'object') {\r\n const v = value as Record<string, string | undefined>;\r\n return v['display'] || v[lang] || v['en'] || v['ar'] || '';\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const trimmed = value.trim();\r\n if (trimmed.startsWith('{') && trimmed.endsWith('}')) {\r\n try {\r\n const parsed = JSON.parse(trimmed) as Record<string, string>;\r\n return parsed[lang] || parsed['en'] || parsed['ar'] || '';\r\n } catch {\r\n return value;\r\n }\r\n }\r\n return value;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'users-groups'\">\r\n <div class=\"flex flex-col gap-4 p-4 max-h-[75vh] overflow-auto\">\r\n <div class=\"flex items-center min-w-0\">\r\n <mt-tabs\r\n class=\"flex-1 min-w-0\"\r\n [options]=\"tabs()\"\r\n [(active)]=\"activeTab\"\r\n mode=\"underline\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n ></mt-tabs>\r\n <div\r\n class=\"flex items-center gap-2 pb-2 px-2 shrink-0 border-b border-slate-200 dark:border-slate-700\"\r\n >\r\n <mt-avatar\r\n [image]=\"\r\n userImage()\r\n ? $any(userImage() | secureImage: true : context : 'avatar/')\r\n : ''\r\n \"\r\n [icon]=\"'user.user-01'\"\r\n styleClass=\"w-8! h-8! text-lg! text-gray-600! bg-surface-300!\"\r\n ></mt-avatar>\r\n <div class=\"flex flex-col min-w-0\">\r\n <span\r\n class=\"text-sm font-medium text-slate-600 dark:text-slate-100 truncate\"\r\n [title]=\"userDisplayName()\"\r\n >\r\n {{ userDisplayName() }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n @if (loading()) {\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\r\n <p-skeleton height=\"4rem\"></p-skeleton>\r\n <p-skeleton height=\"4rem\"></p-skeleton>\r\n <p-skeleton height=\"4rem\"></p-skeleton>\r\n <p-skeleton height=\"4rem\"></p-skeleton>\r\n </div>\r\n } @else if (isEmpty()) {\r\n <div\r\n class=\"flex flex-col items-center justify-center text-center py-10 gap-2 text-slate-500 dark:text-slate-400\"\r\n >\r\n <mt-icon icon=\"general.link-broken-01\" class=\"text-2xl\" />\r\n <span class=\"text-sm font-medium\">\r\n @switch (activeTab()) {\r\n @case (\"groups\") {\r\n {{ t(\"no-linked-groups\") }}\r\n }\r\n @case (\"permissions\") {\r\n {{ t(\"no-permissions\") }}\r\n }\r\n @case (\"roles\") {\r\n {{ t(\"no-roles\") }}\r\n }\r\n @case (\"accessibilities\") {\r\n {{ t(\"no-accessibilities\") }}\r\n }\r\n }\r\n </span>\r\n </div>\r\n } @else {\r\n @switch (activeTab()) {\r\n @case (\"groups\") {\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3 pb-3\">\r\n @for (group of groups(); track group.id) {\r\n <div\r\n class=\"flex flex-col gap-2 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800 p-3 hover:shadow-sm transition-shadow\"\r\n >\r\n <div class=\"flex items-start justify-between gap-2\">\r\n <div class=\"flex items-center gap-3 min-w-0\">\r\n <span\r\n class=\"inline-flex items-center justify-center rounded-md bg-indigo-50 dark:bg-indigo-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"user.users-01\"\r\n class=\"text-indigo-600 dark:text-indigo-300 text-xl\"\r\n />\r\n </span>\r\n <div class=\"flex flex-col min-w-0\">\r\n <span\r\n class=\"text-md text-slate-800 dark:text-slate-100 truncate\"\r\n [title]=\"group.name\"\r\n >\r\n {{ group.name }}\r\n </span>\r\n <span\r\n class=\"inline-flex items-center gap-1 text-xs text-slate-500 dark:text-slate-400\"\r\n >\r\n <mt-icon icon=\"user.users-01\" class=\"text-sm\" />\r\n {{ group.membersCount }} {{ t(\"users-number\") }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n @if (group.isActivated) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-emerald-50 dark:bg-emerald-900/30 px-2 py-0.5 shrink-0\"\r\n >\r\n <span\r\n class=\"w-1.5 h-1.5 rounded-full bg-emerald-500\"\r\n ></span>\r\n <span\r\n class=\"text-emerald-700 dark:text-emerald-200 text-xs font-medium\"\r\n >\r\n {{ t(\"active\") }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-slate-100 dark:bg-slate-700 px-2 py-0.5 shrink-0\"\r\n >\r\n <span\r\n class=\"w-1.5 h-1.5 rounded-full bg-slate-400\"\r\n ></span>\r\n <span\r\n class=\"text-slate-600 dark:text-slate-200 text-xs font-medium\"\r\n >\r\n {{ t(\"inactive\") }}\r\n </span>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case (\"permissions\") {\r\n <div\r\n class=\"flex flex-col divide-y divide-slate-100 dark:divide-slate-700 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800\"\r\n >\r\n @for (permission of permissions(); track permission.id) {\r\n <div class=\"flex items-center gap-3 p-3\">\r\n <span\r\n class=\"inline-flex items-center justify-center rounded-md bg-amber-50 dark:bg-amber-900/30 p-2 shrink-0\"\r\n >\r\n <mt-icon\r\n icon=\"security.shield-tick\"\r\n class=\"text-amber-600 dark:text-amber-300 text-lg\"\r\n />\r\n </span>\r\n <div class=\"flex flex-col min-w-0 flex-1\">\r\n <span\r\n class=\"text-sm font-medium text-slate-800 dark:text-slate-100 truncate\"\r\n [title]=\"permission.name\"\r\n >\r\n {{ permission.name }}\r\n </span>\r\n <span\r\n class=\"text-xs text-slate-500 dark:text-slate-400 truncate\"\r\n [title]=\"permission.command\"\r\n >\r\n {{ permission.command }}\r\n </span>\r\n </div>\r\n @if (permission.moduleType) {\r\n <span\r\n class=\"inline-flex items-center rounded-md bg-slate-50 dark:bg-slate-900/30 px-2 py-0.5 shrink-0 text-xs text-slate-600 dark:text-slate-300 font-medium\"\r\n >\r\n {{ permission.moduleType }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case (\"roles\") {\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3 pb-3\">\r\n @for (role of roles(); track role.id) {\r\n <div\r\n class=\"flex items-center gap-3 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800 p-3\"\r\n >\r\n <span\r\n class=\"inline-flex items-center justify-center rounded-md bg-violet-50 dark:bg-violet-900/30 p-2 shrink-0\"\r\n >\r\n <mt-icon\r\n icon=\"user.user-check-01\"\r\n class=\"text-violet-600 dark:text-violet-300 text-xl\"\r\n />\r\n </span>\r\n <div class=\"flex flex-col min-w-0 flex-1\">\r\n <span\r\n class=\"text-md text-slate-800 dark:text-slate-100 truncate\"\r\n [title]=\"role.name\"\r\n >\r\n {{ role.name }}\r\n </span>\r\n @if (role.moduleType) {\r\n <span class=\"text-xs text-slate-500 dark:text-slate-400\">\r\n {{ role.moduleType }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case (\"accessibilities\") {\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3 pb-3\">\r\n @for (accessibility of accessibilities(); track accessibility.id) {\r\n <div\r\n class=\"flex items-center gap-3 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800 p-3\"\r\n >\r\n <span\r\n class=\"inline-flex items-center justify-center rounded-md bg-sky-50 dark:bg-sky-900/30 p-2 shrink-0\"\r\n >\r\n <mt-icon\r\n icon=\"security.lock-unlocked-01\"\r\n class=\"text-sky-600 dark:text-sky-300 text-xl\"\r\n />\r\n </span>\r\n <div class=\"flex flex-col min-w-0 flex-1\">\r\n <span\r\n class=\"text-md text-slate-800 dark:text-slate-100 truncate\"\r\n [title]=\"accessibility.name\"\r\n >\r\n {{ accessibility.name }}\r\n </span>\r\n @if (accessibility.category) {\r\n <span class=\"text-xs text-slate-500 dark:text-slate-400\">\r\n {{ accessibility.category }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\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 { Icon } from '@masterteam/icons';\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\nimport ResetPasswordForm from './reset-password-form/reset-password-form';\r\nimport UserLinkedGroups from './user-linked-groups/user-linked-groups';\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, Icon, TranslocoDirective],\r\n})\r\nexport default class Users implements OnInit {\r\n typeCol = viewChild.required<TemplateRef<any>>('typeCol');\r\n applicationLinkCol =\r\n viewChild.required<TemplateRef<any>>('applicationLinkCol');\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 'notLinked':\r\n return all.filter((user) => !this.isLinkedToCurrentApplication(user));\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 label: this.translocoService.translate('users-groups.not-linked'),\r\n value: 'notLinked',\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 linkingRowIds = signal<any[]>([]);\r\n rowActions = signal<TableAction[]>([\r\n {\r\n icon: 'general.link-01',\r\n tooltip: this.translocoService.translate('users-groups.linked-groups'),\r\n color: 'secondary',\r\n action: (row: any) => {\r\n this.openLinkedGroupsDialog(row);\r\n },\r\n hidden: (row: any) => !this.isLinkedToCurrentApplication(row),\r\n },\r\n {\r\n icon: 'security.key-01',\r\n tooltip: this.translocoService.translate('users-groups.reset-password'),\r\n color: 'secondary',\r\n action: (row: any) => {\r\n this.addResetPasswordDialog(row);\r\n },\r\n hidden: (row: any) =>\r\n !row.isExternal || !this.isLinkedToCurrentApplication(row),\r\n },\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) =>\r\n !row.isExternal || !this.isLinkedToCurrentApplication(row),\r\n },\r\n {\r\n icon: 'user.user-plus-01',\r\n tooltip: this.translocoService.translate(\r\n 'users-groups.link-to-application',\r\n ),\r\n color: 'success',\r\n variant: 'outlined',\r\n action: (row: any) => {\r\n this.linkUserToApplication(row);\r\n },\r\n hidden: (row: any) => this.isLinkedToCurrentApplication(row),\r\n confirmation: {\r\n type: 'popup',\r\n header: this.translocoService.translate(\r\n 'users-groups.link-confirm-header',\r\n ),\r\n message: this.translocoService.translate(\r\n 'users-groups.link-confirm-message',\r\n ),\r\n icon: 'user.user-plus-01',\r\n acceptLabel: this.translocoService.translate(\r\n 'users-groups.link-to-application',\r\n ),\r\n rejectLabel: this.translocoService.translate('users-groups.cancel'),\r\n acceptButton: {\r\n severity: 'success',\r\n },\r\n },\r\n loading: (row: any) => this.linkingRowIds().includes(row.userName),\r\n },\r\n {\r\n icon: 'general.trash-01',\r\n tooltip: this.translocoService.translate(\r\n 'users-groups.unlink-from-application',\r\n ),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row: any) => {\r\n this.unlinkUserFromApplication(row);\r\n },\r\n hidden: (row: any) => !this.isLinkedToCurrentApplication(row),\r\n confirmation: {\r\n type: 'popup',\r\n header: this.translocoService.translate(\r\n 'users-groups.unlink-confirm-header',\r\n ),\r\n message: this.translocoService.translate(\r\n 'users-groups.unlink-confirm-message',\r\n ),\r\n icon: 'general.link-broken-01',\r\n acceptLabel: this.translocoService.translate(\r\n 'users-groups.unlink-from-application',\r\n ),\r\n rejectLabel: this.translocoService.translate('users-groups.cancel'),\r\n acceptButton: {\r\n severity: 'danger',\r\n },\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: '{{record}}',\r\n label: this.translocoService.translate('users-groups.user'),\r\n type: 'user',\r\n filterConfig: {\r\n type: 'select',\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: 'isLinkedToCurrentApplication',\r\n label: this.translocoService.translate('users-groups.application-link'),\r\n type: 'custom',\r\n customCellTpl: this.applicationLinkCol(),\r\n filterConfig: {\r\n type: 'select',\r\n label: this.translocoService.translate('users-groups.application-link'),\r\n options: [\r\n {\r\n label: this.translocoService.translate('users-groups.linked'),\r\n value: true,\r\n },\r\n {\r\n label: this.translocoService.translate('users-groups.not-linked'),\r\n value: false,\r\n },\r\n ],\r\n },\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.actualValue',\r\n label: this.translocoService.translate('users-groups.last-seen'),\r\n type: 'dateTime',\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 isLinkedToCurrentApplication(user: any): boolean {\r\n return user?.isLinkedToCurrentApplication !== false;\r\n }\r\n\r\n linkUserToApplication(user: any): void {\r\n const userName = user?.userName;\r\n if (!userName) {\r\n return;\r\n }\r\n\r\n this.linkingRowIds.update((ids) => [...ids, userName]);\r\n this.facade\r\n .linkUserToApplication(userName)\r\n .pipe(\r\n finalize(() => {\r\n this.linkingRowIds.update((ids) =>\r\n ids.filter((id) => id !== userName),\r\n );\r\n }),\r\n )\r\n .subscribe();\r\n }\r\n\r\n unlinkUserFromApplication(user: any): void {\r\n const userName = user?.userName;\r\n if (!userName || !this.isLinkedToCurrentApplication(user)) {\r\n return;\r\n }\r\n\r\n this.deletingRowIds.update((ids) => [...ids, userName]);\r\n this.facade\r\n .deleteUser(userName)\r\n .pipe(\r\n finalize(() => {\r\n this.deletingRowIds.update((ids) =>\r\n ids.filter((id) => id !== userName),\r\n );\r\n }),\r\n )\r\n .subscribe();\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 addResetPasswordDialog(user: any) {\r\n this.modal.openModal(ResetPasswordForm, 'drawer', {\r\n header: this.translocoService.translate('users-groups.reset-password'),\r\n styleClass: '!w-[30rem] !absolute !shadow-none',\r\n appendTo: 'page-content',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: {\r\n user,\r\n },\r\n });\r\n }\r\n\r\n openLinkedGroupsDialog(user: any) {\r\n this.modal.openModal(UserLinkedGroups, 'dialog', {\r\n header: this.translocoService.translate('users-groups.summary'),\r\n styleClass: '!w-[50rem]',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: {\r\n 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 @if (row.isExternal) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-slate-50 dark:bg-slate-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"general.link-external-02\"\r\n class=\"text-slate-600 dark:text-slate-300 text-sm\"\r\n />\r\n <span class=\"text-slate-700 dark:text-slate-200 text-xs font-medium\">\r\n {{ t(\"external\") }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-emerald-50 dark:bg-emerald-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"user.users-01\"\r\n class=\"text-emerald-600 dark:text-emerald-300 text-sm\"\r\n />\r\n <span\r\n class=\"text-emerald-700 dark:text-emerald-200 text-xs font-medium\"\r\n >\r\n {{ t(\"internal\") }}\r\n </span>\r\n </span>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #applicationLinkCol let-row>\r\n @if (isLinkedToCurrentApplication(row)) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-emerald-50 dark:bg-emerald-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"user.user-check-01\"\r\n class=\"text-emerald-600 dark:text-emerald-300 text-sm\"\r\n />\r\n <span\r\n class=\"text-emerald-700 dark:text-emerald-200 text-xs font-medium\"\r\n >\r\n {{ t(\"linked\") }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-amber-50 dark:bg-amber-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"general.link-broken-01\"\r\n class=\"text-amber-600 dark:text-amber-300 text-sm\"\r\n />\r\n <span class=\"text-amber-700 dark:text-amber-200 text-xs font-medium\">\r\n {{ t(\"not-linked\") }}\r\n </span>\r\n </span>\r\n }\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]=\"false\"\r\n [loading]=\"loading()\"\r\n storageKey=\"users-groups-users-table\"\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) => 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?.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 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 noCard\r\n [data]=\"selectedGroup()?.members || []\"\r\n [columns]=\"tableColumns()\"\r\n [rowActions]=\"rowActions()\"\r\n storageKey=\"users-groups-group-members-table\"\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]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n [disabled]=\"createUpdateGroupLoading()\"\r\n (click)=\"ref.close(false)\"\r\n />\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 { Component, inject, linkedSignal, OnInit, signal } 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 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.display',\r\n label: this.translocoService.translate('users-groups.group'),\r\n type: 'text',\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 <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]=\"false\"\r\n [loading]=\"loading()\"\r\n storageKey=\"users-groups-groups-table\"\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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@masterteam/users-groups",
3
- "version": "0.0.17",
3
+ "version": "0.0.19",
4
4
  "publishConfig": {
5
5
  "directory": "../../../dist/masterteam/users-groups",
6
6
  "linkDirectory": false,
@@ -20,9 +20,9 @@
20
20
  "tailwindcss": "^4.2.2",
21
21
  "tailwindcss-primeui": "^0.6.1",
22
22
  "@ngxs/store": "^20.1.0",
23
- "@masterteam/components": "^0.0.167",
23
+ "@masterteam/components": "^0.0.171",
24
24
  "@masterteam/icons": "^0.0.15",
25
- "@masterteam/forms": "^0.0.76"
25
+ "@masterteam/forms": "^0.0.78"
26
26
  },
27
27
  "sideEffects": false,
28
28
  "exports": {