@masterteam/permissions 0.0.11 → 0.0.13

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.
@@ -412,8 +412,8 @@ let PermissionsState = class PermissionsState extends CrudStateBase {
412
412
  groupPermissions: [],
413
413
  });
414
414
  }
415
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PermissionsState, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
416
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PermissionsState });
415
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionsState, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
416
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionsState });
417
417
  };
418
418
  __decorate([
419
419
  Action(LoadRoles)
@@ -501,7 +501,7 @@ PermissionsState = __decorate([
501
501
  },
502
502
  })
503
503
  ], PermissionsState);
504
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PermissionsState, decorators: [{
504
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionsState, decorators: [{
505
505
  type: Injectable
506
506
  }], propDecorators: { loadRoles: [], selectRole: [], selectGroup: [], loadPermissions: [], loadGroupPermissions: [], updatePermissionLocally: [], updatePermission: [], updateGroupPermission: [], toggleAllLevelPermissions: [], toggleAllGroupPermissions: [], setModuleInfo: [], reset: [] } });
507
507
  function hasParentScope(state) {
@@ -554,21 +554,21 @@ class PermissionsFacade {
554
554
  // ============================================================================
555
555
  // Loading Signals - Computed from slice (minimal reactivity)
556
556
  // ============================================================================
557
- isLoadingRoles = computed(() => this.loadingActive().includes(PermissionsActionKey.LoadRoles), ...(ngDevMode ? [{ debugName: "isLoadingRoles" }] : []));
558
- isLoadingPermissions = computed(() => this.loadingActive().includes(PermissionsActionKey.LoadPermissions), ...(ngDevMode ? [{ debugName: "isLoadingPermissions" }] : []));
559
- isLoadingGroupPermissions = computed(() => this.loadingActive().includes(PermissionsActionKey.LoadGroupPermissions), ...(ngDevMode ? [{ debugName: "isLoadingGroupPermissions" }] : []));
560
- isUpdatingPermission = computed(() => this.loadingActive().includes(PermissionsActionKey.UpdatePermission), ...(ngDevMode ? [{ debugName: "isUpdatingPermission" }] : []));
561
- isUpdatingGroupPermission = computed(() => this.loadingActive().includes(PermissionsActionKey.UpdateGroupPermission), ...(ngDevMode ? [{ debugName: "isUpdatingGroupPermission" }] : []));
562
- isTogglingLevelPermissions = computed(() => this.loadingActive().includes(PermissionsActionKey.ToggleAllLevelPermissions), ...(ngDevMode ? [{ debugName: "isTogglingLevelPermissions" }] : []));
563
- isTogglingGroupPermissions = computed(() => this.loadingActive().includes(PermissionsActionKey.ToggleAllGroupPermissions), ...(ngDevMode ? [{ debugName: "isTogglingGroupPermissions" }] : []));
557
+ isLoadingRoles = computed(() => this.loadingActive().includes(PermissionsActionKey.LoadRoles), ...(ngDevMode ? [{ debugName: "isLoadingRoles" }] : /* istanbul ignore next */ []));
558
+ isLoadingPermissions = computed(() => this.loadingActive().includes(PermissionsActionKey.LoadPermissions), ...(ngDevMode ? [{ debugName: "isLoadingPermissions" }] : /* istanbul ignore next */ []));
559
+ isLoadingGroupPermissions = computed(() => this.loadingActive().includes(PermissionsActionKey.LoadGroupPermissions), ...(ngDevMode ? [{ debugName: "isLoadingGroupPermissions" }] : /* istanbul ignore next */ []));
560
+ isUpdatingPermission = computed(() => this.loadingActive().includes(PermissionsActionKey.UpdatePermission), ...(ngDevMode ? [{ debugName: "isUpdatingPermission" }] : /* istanbul ignore next */ []));
561
+ isUpdatingGroupPermission = computed(() => this.loadingActive().includes(PermissionsActionKey.UpdateGroupPermission), ...(ngDevMode ? [{ debugName: "isUpdatingGroupPermission" }] : /* istanbul ignore next */ []));
562
+ isTogglingLevelPermissions = computed(() => this.loadingActive().includes(PermissionsActionKey.ToggleAllLevelPermissions), ...(ngDevMode ? [{ debugName: "isTogglingLevelPermissions" }] : /* istanbul ignore next */ []));
563
+ isTogglingGroupPermissions = computed(() => this.loadingActive().includes(PermissionsActionKey.ToggleAllGroupPermissions), ...(ngDevMode ? [{ debugName: "isTogglingGroupPermissions" }] : /* istanbul ignore next */ []));
564
564
  // ============================================================================
565
565
  // Error Signals - Computed from slice (minimal reactivity)
566
566
  // ============================================================================
567
- rolesError = computed(() => this.errors()[PermissionsActionKey.LoadRoles] ?? null, ...(ngDevMode ? [{ debugName: "rolesError" }] : []));
568
- permissionsError = computed(() => this.errors()[PermissionsActionKey.LoadPermissions] ?? null, ...(ngDevMode ? [{ debugName: "permissionsError" }] : []));
569
- groupPermissionsError = computed(() => this.errors()[PermissionsActionKey.LoadGroupPermissions] ?? null, ...(ngDevMode ? [{ debugName: "groupPermissionsError" }] : []));
570
- updatePermissionError = computed(() => this.errors()[PermissionsActionKey.UpdatePermission] ?? null, ...(ngDevMode ? [{ debugName: "updatePermissionError" }] : []));
571
- updateGroupPermissionError = computed(() => this.errors()[PermissionsActionKey.UpdateGroupPermission] ?? null, ...(ngDevMode ? [{ debugName: "updateGroupPermissionError" }] : []));
567
+ rolesError = computed(() => this.errors()[PermissionsActionKey.LoadRoles] ?? null, ...(ngDevMode ? [{ debugName: "rolesError" }] : /* istanbul ignore next */ []));
568
+ permissionsError = computed(() => this.errors()[PermissionsActionKey.LoadPermissions] ?? null, ...(ngDevMode ? [{ debugName: "permissionsError" }] : /* istanbul ignore next */ []));
569
+ groupPermissionsError = computed(() => this.errors()[PermissionsActionKey.LoadGroupPermissions] ?? null, ...(ngDevMode ? [{ debugName: "groupPermissionsError" }] : /* istanbul ignore next */ []));
570
+ updatePermissionError = computed(() => this.errors()[PermissionsActionKey.UpdatePermission] ?? null, ...(ngDevMode ? [{ debugName: "updatePermissionError" }] : /* istanbul ignore next */ []));
571
+ updateGroupPermissionError = computed(() => this.errors()[PermissionsActionKey.UpdateGroupPermission] ?? null, ...(ngDevMode ? [{ debugName: "updateGroupPermissionError" }] : /* istanbul ignore next */ []));
572
572
  // ============================================================================
573
573
  // Action Dispatchers
574
574
  // ============================================================================
@@ -611,10 +611,10 @@ class PermissionsFacade {
611
611
  reset() {
612
612
  return this.store.dispatch(new Reset());
613
613
  }
614
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PermissionsFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
615
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PermissionsFacade, providedIn: 'root' });
614
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionsFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
615
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionsFacade, providedIn: 'root' });
616
616
  }
617
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PermissionsFacade, decorators: [{
617
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionsFacade, decorators: [{
618
618
  type: Injectable,
619
619
  args: [{ providedIn: 'root' }]
620
620
  }] });
@@ -623,21 +623,21 @@ class PermissionsEditDialog {
623
623
  permissionsFacade = inject(PermissionsFacade);
624
624
  modal = inject(ModalService, { optional: true });
625
625
  ref = inject(ModalRef, { optional: true });
626
- permissionGroup = input(null, ...(ngDevMode ? [{ debugName: "permissionGroup" }] : []));
627
- inline = input(false, ...(ngDevMode ? [{ debugName: "inline" }] : []));
626
+ permissionGroup = input(null, ...(ngDevMode ? [{ debugName: "permissionGroup" }] : /* istanbul ignore next */ []));
627
+ inline = input(false, ...(ngDevMode ? [{ debugName: "inline" }] : /* istanbul ignore next */ []));
628
628
  // Use new facade pattern
629
629
  addPermissionsLoading = this.permissionsFacade.isUpdatingPermission;
630
630
  addPermissionsError = this.permissionsFacade.updatePermissionError;
631
- levelId = input.required(...(ngDevMode ? [{ debugName: "levelId" }] : []));
632
- roleValue = input.required(...(ngDevMode ? [{ debugName: "roleValue" }] : []));
633
- isGroup = input.required(...(ngDevMode ? [{ debugName: "isGroup" }] : []));
631
+ levelId = input.required(...(ngDevMode ? [{ debugName: "levelId" }] : /* istanbul ignore next */ []));
632
+ roleValue = input.required(...(ngDevMode ? [{ debugName: "roleValue" }] : /* istanbul ignore next */ []));
633
+ isGroup = input.required(...(ngDevMode ? [{ debugName: "isGroup" }] : /* istanbul ignore next */ []));
634
634
  closeDialog = output();
635
- actionControls = signal(new Map(), ...(ngDevMode ? [{ debugName: "actionControls" }] : []));
636
- toggleAll = signal(false, ...(ngDevMode ? [{ debugName: "toggleAll" }] : []));
635
+ actionControls = signal(new Map(), ...(ngDevMode ? [{ debugName: "actionControls" }] : /* istanbul ignore next */ []));
636
+ toggleAll = signal(false, ...(ngDevMode ? [{ debugName: "toggleAll" }] : /* istanbul ignore next */ []));
637
637
  contentClass = computed(() => this.inline()
638
638
  ? 'flex flex-col gap-3'
639
- : `flex flex-col gap-3 p-4 ${this.modal?.contentClass ?? ''}`, ...(ngDevMode ? [{ debugName: "contentClass" }] : []));
640
- footerClass = computed(() => this.inline() ? 'mt-4 flex justify-end' : (this.modal?.footerClass ?? ''), ...(ngDevMode ? [{ debugName: "footerClass" }] : []));
639
+ : `flex flex-col gap-3 p-4 ${this.modal?.contentClass ?? ''}`, ...(ngDevMode ? [{ debugName: "contentClass" }] : /* istanbul ignore next */ []));
640
+ footerClass = computed(() => this.inline() ? 'mt-4 flex justify-end' : (this.modal?.footerClass ?? ''), ...(ngDevMode ? [{ debugName: "footerClass" }] : /* istanbul ignore next */ []));
641
641
  constructor() {
642
642
  effect(() => {
643
643
  const group = this.permissionGroup();
@@ -705,10 +705,10 @@ class PermissionsEditDialog {
705
705
  control?.setValue(this.toggleAll());
706
706
  }
707
707
  }
708
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PermissionsEditDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
709
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: PermissionsEditDialog, isStandalone: true, selector: "mt-permissions-edit-dialog", inputs: { permissionGroup: { classPropertyName: "permissionGroup", publicName: "permissionGroup", isSignal: true, isRequired: false, transformFunction: null }, inline: { classPropertyName: "inline", publicName: "inline", isSignal: true, isRequired: false, transformFunction: null }, levelId: { classPropertyName: "levelId", publicName: "levelId", isSignal: true, isRequired: true, transformFunction: null }, roleValue: { classPropertyName: "roleValue", publicName: "roleValue", isSignal: true, isRequired: true, transformFunction: null }, isGroup: { classPropertyName: "isGroup", publicName: "isGroup", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { closeDialog: "closeDialog" }, ngImport: i0, template: "<div [class]=\"contentClass()\">\r\n @if (permissionGroup(); as group) {\r\n <div\r\n class=\"mb-4 flex flex-row gap-3 rounded-lg border border-surface p-3 sm:flex-row sm:items-center sm:justify-between\"\r\n >\r\n <span class=\"text-sm font-medium\">{{\r\n \"permissions.selectAll\" | transloco\r\n }}</span>\r\n <mt-toggle-field\r\n class=\"self-end shrink-0 sm:self-center\"\r\n [(ngModel)]=\"toggleAll\"\r\n (onChange)=\"selectAll()\"\r\n ></mt-toggle-field>\r\n </div>\r\n @for (action of group.actions; track trackByActionId($index, action)) {\r\n <div\r\n class=\"flex flex-row gap-3 rounded-lg border border-surface p-3 sm:flex-row sm:items-center sm:justify-between\"\r\n >\r\n <span class=\"min-w-0 break-words text-sm font-medium\">{{\r\n action.name?.display\r\n }}</span>\r\n <mt-toggle-field\r\n class=\"self-end shrink-0 sm:self-center\"\r\n [formControl]=\"getControl(action.id)\"\r\n ></mt-toggle-field>\r\n </div>\r\n }\r\n }\r\n</div>\r\n<div [class]=\"footerClass()\">\r\n <mt-button\r\n class=\"w-full sm:w-auto\"\r\n [label]=\"'save' | transloco\"\r\n (click)=\"onSave()\"\r\n [loading]=\"addPermissionsLoading()\"\r\n />\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: ToggleField, selector: "mt-toggle-field", inputs: ["label", "labelPosition", "placeholder", "readonly", "pInputs", "required", "toggleShape", "size", "icon", "descriptionCard"], outputs: ["onChange"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
708
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionsEditDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
709
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: PermissionsEditDialog, isStandalone: true, selector: "mt-permissions-edit-dialog", inputs: { permissionGroup: { classPropertyName: "permissionGroup", publicName: "permissionGroup", isSignal: true, isRequired: false, transformFunction: null }, inline: { classPropertyName: "inline", publicName: "inline", isSignal: true, isRequired: false, transformFunction: null }, levelId: { classPropertyName: "levelId", publicName: "levelId", isSignal: true, isRequired: true, transformFunction: null }, roleValue: { classPropertyName: "roleValue", publicName: "roleValue", isSignal: true, isRequired: true, transformFunction: null }, isGroup: { classPropertyName: "isGroup", publicName: "isGroup", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { closeDialog: "closeDialog" }, ngImport: i0, template: "<div [class]=\"contentClass()\">\r\n @if (permissionGroup(); as group) {\r\n <div\r\n class=\"mb-4 flex flex-row gap-3 rounded-lg border border-surface p-3 sm:flex-row sm:items-center sm:justify-between\"\r\n >\r\n <span class=\"text-sm font-medium\">{{\r\n \"permissions.selectAll\" | transloco\r\n }}</span>\r\n <mt-toggle-field\r\n class=\"self-end shrink-0 sm:self-center\"\r\n [(ngModel)]=\"toggleAll\"\r\n (onChange)=\"selectAll()\"\r\n ></mt-toggle-field>\r\n </div>\r\n @for (action of group.actions; track trackByActionId($index, action)) {\r\n <div\r\n class=\"flex flex-row gap-3 rounded-lg border border-surface p-3 sm:flex-row sm:items-center sm:justify-between\"\r\n >\r\n <span class=\"min-w-0 break-words text-sm font-medium\">{{\r\n action.name?.display\r\n }}</span>\r\n <mt-toggle-field\r\n class=\"self-end shrink-0 sm:self-center\"\r\n [formControl]=\"getControl(action.id)\"\r\n ></mt-toggle-field>\r\n </div>\r\n }\r\n }\r\n</div>\r\n<div [class]=\"footerClass()\">\r\n <mt-button\r\n class=\"w-full sm:w-auto\"\r\n [label]=\"'save' | transloco\"\r\n (click)=\"onSave()\"\r\n [loading]=\"addPermissionsLoading()\"\r\n />\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: ToggleField, selector: "mt-toggle-field", inputs: ["label", "inputId", "labelPosition", "placeholder", "readonly", "pInputs", "required", "toggleShape", "size", "icon", "descriptionCard"], outputs: ["onChange"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
710
710
  }
711
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PermissionsEditDialog, decorators: [{
711
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionsEditDialog, decorators: [{
712
712
  type: Component,
713
713
  args: [{ selector: 'mt-permissions-edit-dialog', imports: [
714
714
  CommonModule,
@@ -732,9 +732,9 @@ class PermissionsPage {
732
732
  // Use new facade pattern
733
733
  levelRoles = this.permissionsFacade.roles;
734
734
  selectedRoleValue = this.permissionsFacade.selectedRoleValue;
735
- selectedRole = computed(() => this.selectedRoleValue() ?? '', ...(ngDevMode ? [{ debugName: "selectedRole" }] : []));
735
+ selectedRole = computed(() => this.selectedRoleValue() ?? '', ...(ngDevMode ? [{ debugName: "selectedRole" }] : /* istanbul ignore next */ []));
736
736
  selectedGroupValue = this.permissionsFacade.selectedGroupValue;
737
- selectedGroup = computed(() => this.selectedGroupValue(), ...(ngDevMode ? [{ debugName: "selectedGroup" }] : []));
737
+ selectedGroup = computed(() => this.selectedGroupValue(), ...(ngDevMode ? [{ debugName: "selectedGroup" }] : /* istanbul ignore next */ []));
738
738
  permissions = this.permissionsFacade.permissions;
739
739
  loading = this.permissionsFacade.isLoadingRoles;
740
740
  permissionsLoading = this.permissionsFacade.isLoadingPermissions;
@@ -744,19 +744,19 @@ class PermissionsPage {
744
744
  groupOrRoleId = computed(() => {
745
745
  const idParam = this.route.snapshot.firstChild?.paramMap.get('id');
746
746
  return idParam ? idParam : '';
747
- }, ...(ngDevMode ? [{ debugName: "groupOrRoleId" }] : []));
747
+ }, ...(ngDevMode ? [{ debugName: "groupOrRoleId" }] : /* istanbul ignore next */ []));
748
748
  selectedTabFromParams = computed(() => {
749
749
  const idParam = this.route.snapshot.firstChild?.data['selectedTab'];
750
750
  return idParam ? idParam : 'roles';
751
- }, ...(ngDevMode ? [{ debugName: "selectedTabFromParams" }] : []));
751
+ }, ...(ngDevMode ? [{ debugName: "selectedTabFromParams" }] : /* istanbul ignore next */ []));
752
752
  permissionTargetValue = computed(() => this.selectedTab() === 'roles'
753
753
  ? (this.selectedRoleValue() ?? '')
754
- : (this.selectedGroup()?.toString() ?? ''), ...(ngDevMode ? [{ debugName: "permissionTargetValue" }] : []));
754
+ : (this.selectedGroup()?.toString() ?? ''), ...(ngDevMode ? [{ debugName: "permissionTargetValue" }] : /* istanbul ignore next */ []));
755
755
  singlePermissionGroup = computed(() => {
756
756
  const permissionGroups = this.permissions();
757
757
  return permissionGroups.length === 1 ? permissionGroups[0] : null;
758
- }, ...(ngDevMode ? [{ debugName: "singlePermissionGroup" }] : []));
759
- selectedTab = linkedSignal(this.selectedTabFromParams, ...(ngDevMode ? [{ debugName: "selectedTab" }] : []));
758
+ }, ...(ngDevMode ? [{ debugName: "singlePermissionGroup" }] : /* istanbul ignore next */ []));
759
+ selectedTab = linkedSignal(this.selectedTabFromParams, ...(ngDevMode ? [{ debugName: "selectedTab" }] : /* istanbul ignore next */ []));
760
760
  tabsList = signal([
761
761
  {
762
762
  label: this.translocoService.translate('permissions.roles'),
@@ -766,8 +766,8 @@ class PermissionsPage {
766
766
  label: this.translocoService.translate('permissions.groups'),
767
767
  value: 'groups',
768
768
  },
769
- ], ...(ngDevMode ? [{ debugName: "tabsList" }] : []));
770
- firstLoad = signal(true, ...(ngDevMode ? [{ debugName: "firstLoad" }] : []));
769
+ ], ...(ngDevMode ? [{ debugName: "tabsList" }] : /* istanbul ignore next */ []));
770
+ firstLoad = signal(true, ...(ngDevMode ? [{ debugName: "firstLoad" }] : /* istanbul ignore next */ []));
771
771
  constructor() {
772
772
  effect(() => {
773
773
  const allEnabled = this.isAllPermissionsEnabled();
@@ -914,10 +914,10 @@ class PermissionsPage {
914
914
  ngOnDestroy() {
915
915
  this.permissionsFacade.reset();
916
916
  }
917
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PermissionsPage, deps: [], target: i0.ɵɵFactoryTarget.Component });
918
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: PermissionsPage, isStandalone: true, selector: "mt-permissions-page", ngImport: i0, template: "<div\r\n id=\"permissions-page-card\"\r\n class=\"grid h-full min-h-0 w-full grid-cols-[minmax(18rem,22rem)_minmax(0,1fr)] gap-4 p-1 max-[1025px]:h-auto max-[1025px]:grid-cols-1 max-[1025px]:gap-3\"\r\n>\r\n <div class=\"min-h-0 min-w-0\">\r\n <mt-card class=\"h-full max-[1025px]:h-auto\">\r\n <ng-template #headless>\r\n <div class=\"flex h-full min-h-0 flex-col\">\r\n <div\r\n class=\"p-4 pb-0 bg-surface-50 rounded-t-2xl border-b border-surface\"\r\n >\r\n <h2 class=\"text-lg font-semibold mb-3\">\r\n {{ \"permissions.rolesAndGroups\" | transloco }}\r\n </h2>\r\n\r\n <div class=\"overflow-x-auto pb-4\">\r\n <mt-tabs\r\n class=\"min-w-max\"\r\n [(active)]=\"selectedTab\"\r\n [options]=\"tabsList()\"\r\n size=\"large\"\r\n (onChange)=\"onTabChange($event)\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex-1 overflow-y-auto p-4 max-[1025px]:max-h-[42vh]\">\r\n @if (loading()) {\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n } @else {\r\n @if (selectedTab() === \"roles\") {\r\n @for (level of levelRoles(); track level) {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n <h2 class=\"font-semibold\">{{ level?.level?.display }}</h2>\r\n @for (role of level.roles; track role.value) {\r\n <div\r\n class=\"flex items-start gap-3 rounded-lg border-2 border-dashed border-gray-300 p-3 transition-colors cursor-pointer\"\r\n [class.bg-primary-50]=\"selectedRole() === role.value\"\r\n [class.hover:bg-surface-100]=\"\r\n selectedRole() !== role.value\r\n \"\r\n [class.border-primary-400]=\"\r\n selectedRole() === role.value\r\n \"\r\n [style.--p-avatar-background]=\"\r\n selectedRole() === role.value\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedRole() === role.value ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectRole(role.value)\"\r\n >\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'user.user-check-01'\"\r\n shape=\"square\"\r\n >\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ role.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noRolesFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noLevelRolesFound\" | transloco }}\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n @for (group of groups(); track group.name) {\r\n <div\r\n class=\"flex items-start gap-3 rounded-lg border-2 border-dashed border-gray-300 p-3 transition-colors cursor-pointer\"\r\n [class.bg-primary-50]=\"selectedGroup() === group.id\"\r\n [class.hover:bg-surface-100]=\"\r\n selectedGroup() !== group.id\r\n \"\r\n [class.border-primary-400]=\"selectedGroup() === group.id\"\r\n [style.--p-avatar-background]=\"\r\n selectedGroup() === group.id\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedGroup() === group.id ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectGroup(group.id)\"\r\n >\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'user.users-check'\"\r\n shape=\"square\"\r\n >\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ group.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noGroupsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n </div>\r\n\r\n <div class=\"min-h-0 min-w-0\">\r\n @if (!selectedRole() && !selectedGroup()) {\r\n <mt-card class=\"h-full max-[1025px]:h-auto\">\r\n <ng-template #headless>\r\n <div\r\n class=\"flex h-full min-h-[16rem] items-center justify-center p-6 text-center text-muted-color\"\r\n >\r\n {{ \"permissions.selectRoleOrGroupToViewPermissions\" | transloco }}\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n } @else {\r\n <mt-card class=\"h-full max-[1025px]:h-auto\">\r\n <ng-template #headless>\r\n <div class=\"flex h-full min-h-0 flex-col\">\r\n <div class=\"mb-5 border-b border-surface p-4 pb-2\">\r\n <h2 class=\"mb-3 text-lg font-semibold\">\r\n {{ \"permissions.permissions\" | transloco }}\r\n </h2>\r\n </div>\r\n @if (permissionsLoading()) {\r\n <div class=\"mx-4\">\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"mx-4 mb-5 flex flex-row gap-3 rounded-lg border-1 border-surface p-3 sm:items-center sm:justify-between\"\r\n >\r\n <div class=\"flex min-w-0 items-start gap-3\">\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'security.lock-unlocked-01'\"\r\n shape=\"square\"\r\n size=\"large\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"'var(--p-' + 'primary' + '-600)'\"\r\n >\r\n </mt-avatar>\r\n <div class=\"min-w-0\">\r\n <div class=\"text-sm font-semibold\">\r\n {{ \"permissions.setAllPermissions\" | transloco }}\r\n </div>\r\n <div class=\"text-xs text-muted-color break-words\">\r\n {{ \"permissions.recommendedForSimpleForms\" | transloco }}\r\n </div>\r\n </div>\r\n </div>\r\n <mt-toggle-field\r\n class=\"self-end shrink-0 sm:self-center\"\r\n [formControl]=\"allPermissionsToggle\"\r\n ></mt-toggle-field>\r\n </div>\r\n\r\n <div\r\n class=\"min-h-0 flex-1 overflow-y-auto border-t border-surface px-4\"\r\n >\r\n @if (singlePermissionGroup(); as group) {\r\n <div\r\n class=\"my-5 rounded-lg border border-surface bg-surface-50 p-4\"\r\n >\r\n <div class=\"mb-4 flex items-start gap-3\">\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'editor.dotpoints-02'\"\r\n shape=\"square\"\r\n size=\"normal\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n 'var(--p-' + 'primary' + '-600)'\r\n \"\r\n >\r\n </mt-avatar>\r\n <span class=\"min-w-0 break-words text-sm font-medium\">\r\n {{ group.name?.display }}\r\n </span>\r\n </div>\r\n\r\n <mt-permissions-edit-dialog\r\n [inline]=\"true\"\r\n [permissionGroup]=\"group\"\r\n [levelId]=\"levelId()\"\r\n [roleValue]=\"permissionTargetValue()\"\r\n [isGroup]=\"selectedTab() !== 'roles'\"\r\n />\r\n </div>\r\n } @else {\r\n <div class=\"space-y-3 my-5\">\r\n @for (group of permissions(); track group.name) {\r\n <div\r\n class=\"flex flex-row gap-3 rounded-lg border-1 border-surface p-3 transition-colors hover:bg-surface-100 sm:items-center sm:justify-between\"\r\n >\r\n <div class=\"flex min-w-0 items-start gap-3\">\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'editor.dotpoints-02'\"\r\n shape=\"square\"\r\n size=\"normal\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n 'var(--p-' + 'primary' + '-600)'\r\n \"\r\n >\r\n </mt-avatar>\r\n <span class=\"min-w-0 break-words text-sm\">\r\n {{ group.name?.display }}\r\n </span>\r\n </div>\r\n <mt-button\r\n class=\"self-end sm:self-auto\"\r\n [text]=\"true\"\r\n icon=\"custom.pencil\"\r\n severity=\"primary\"\r\n (click)=\"openPermissionDialog(group)\"\r\n >\r\n </mt-button>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noPermissionsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n }\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { 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: "component", type: ToggleField, selector: "mt-toggle-field", inputs: ["label", "labelPosition", "placeholder", "readonly", "pInputs", "required", "toggleShape", "size", "icon", "descriptionCard"], outputs: ["onChange"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i2$1.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "size", "fluid", "disabled"], outputs: ["activeChange", "onChange"] }, { kind: "component", type: PermissionsEditDialog, selector: "mt-permissions-edit-dialog", inputs: ["permissionGroup", "inline", "levelId", "roleValue", "isGroup"], outputs: ["closeDialog"] }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
917
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionsPage, deps: [], target: i0.ɵɵFactoryTarget.Component });
918
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: PermissionsPage, isStandalone: true, selector: "mt-permissions-page", ngImport: i0, template: "<div\r\n id=\"permissions-page-card\"\r\n class=\"grid h-full min-h-0 w-full grid-cols-[minmax(18rem,22rem)_minmax(0,1fr)] gap-4 p-1 max-[1025px]:h-auto max-[1025px]:grid-cols-1 max-[1025px]:gap-3\"\r\n>\r\n <div class=\"min-h-0 min-w-0\">\r\n <mt-card class=\"h-full max-[1025px]:h-auto\">\r\n <ng-template #headless>\r\n <div class=\"flex h-full min-h-0 flex-col\">\r\n <div\r\n class=\"p-4 pb-0 bg-surface-50 rounded-t-2xl border-b border-surface\"\r\n >\r\n <h2 class=\"text-lg font-semibold mb-3\">\r\n {{ \"permissions.rolesAndGroups\" | transloco }}\r\n </h2>\r\n\r\n <div class=\"overflow-x-auto pb-4\">\r\n <mt-tabs\r\n class=\"min-w-max\"\r\n [(active)]=\"selectedTab\"\r\n [options]=\"tabsList()\"\r\n size=\"large\"\r\n (onChange)=\"onTabChange($event)\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex-1 overflow-y-auto p-4 max-[1025px]:max-h-[42vh]\">\r\n @if (loading()) {\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n } @else {\r\n @if (selectedTab() === \"roles\") {\r\n @for (level of levelRoles(); track level) {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n <h2 class=\"font-semibold\">{{ level?.level?.display }}</h2>\r\n @for (role of level.roles; track role.value) {\r\n <div\r\n class=\"flex items-start gap-3 rounded-lg border-2 border-dashed border-gray-300 p-3 transition-colors cursor-pointer\"\r\n [class.bg-primary-50]=\"selectedRole() === role.value\"\r\n [class.hover:bg-surface-100]=\"\r\n selectedRole() !== role.value\r\n \"\r\n [class.border-primary-400]=\"\r\n selectedRole() === role.value\r\n \"\r\n [style.--p-avatar-background]=\"\r\n selectedRole() === role.value\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedRole() === role.value ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectRole(role.value)\"\r\n >\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'user.user-check-01'\"\r\n shape=\"square\"\r\n >\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ role.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noRolesFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noLevelRolesFound\" | transloco }}\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n @for (group of groups(); track group.name) {\r\n <div\r\n class=\"flex items-start gap-3 rounded-lg border-2 border-dashed border-gray-300 p-3 transition-colors cursor-pointer\"\r\n [class.bg-primary-50]=\"selectedGroup() === group.id\"\r\n [class.hover:bg-surface-100]=\"\r\n selectedGroup() !== group.id\r\n \"\r\n [class.border-primary-400]=\"selectedGroup() === group.id\"\r\n [style.--p-avatar-background]=\"\r\n selectedGroup() === group.id\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedGroup() === group.id ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectGroup(group.id)\"\r\n >\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'user.users-check'\"\r\n shape=\"square\"\r\n >\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ group.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noGroupsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n </div>\r\n\r\n <div class=\"min-h-0 min-w-0\">\r\n @if (!selectedRole() && !selectedGroup()) {\r\n <mt-card class=\"h-full max-[1025px]:h-auto\">\r\n <ng-template #headless>\r\n <div\r\n class=\"flex h-full min-h-[16rem] items-center justify-center p-6 text-center text-muted-color\"\r\n >\r\n {{ \"permissions.selectRoleOrGroupToViewPermissions\" | transloco }}\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n } @else {\r\n <mt-card class=\"h-full max-[1025px]:h-auto\">\r\n <ng-template #headless>\r\n <div class=\"flex h-full min-h-0 flex-col\">\r\n <div class=\"mb-5 border-b border-surface p-4 pb-2\">\r\n <h2 class=\"mb-3 text-lg font-semibold\">\r\n {{ \"permissions.permissions\" | transloco }}\r\n </h2>\r\n </div>\r\n @if (permissionsLoading()) {\r\n <div class=\"mx-4\">\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"mx-4 mb-5 flex flex-row gap-3 rounded-lg border-1 border-surface p-3 sm:items-center sm:justify-between\"\r\n >\r\n <div class=\"flex min-w-0 items-start gap-3\">\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'security.lock-unlocked-01'\"\r\n shape=\"square\"\r\n size=\"large\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"'var(--p-' + 'primary' + '-600)'\"\r\n >\r\n </mt-avatar>\r\n <div class=\"min-w-0\">\r\n <div class=\"text-sm font-semibold\">\r\n {{ \"permissions.setAllPermissions\" | transloco }}\r\n </div>\r\n <div class=\"text-xs text-muted-color break-words\">\r\n {{ \"permissions.recommendedForSimpleForms\" | transloco }}\r\n </div>\r\n </div>\r\n </div>\r\n <mt-toggle-field\r\n class=\"self-end shrink-0 sm:self-center\"\r\n [formControl]=\"allPermissionsToggle\"\r\n ></mt-toggle-field>\r\n </div>\r\n\r\n <div\r\n class=\"min-h-0 flex-1 overflow-y-auto border-t border-surface px-4\"\r\n >\r\n @if (singlePermissionGroup(); as group) {\r\n <div\r\n class=\"my-5 rounded-lg border border-surface bg-surface-50 p-4\"\r\n >\r\n <div class=\"mb-4 flex items-start gap-3\">\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'editor.dotpoints-02'\"\r\n shape=\"square\"\r\n size=\"normal\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n 'var(--p-' + 'primary' + '-600)'\r\n \"\r\n >\r\n </mt-avatar>\r\n <span class=\"min-w-0 break-words text-sm font-medium\">\r\n {{ group.name?.display }}\r\n </span>\r\n </div>\r\n\r\n <mt-permissions-edit-dialog\r\n [inline]=\"true\"\r\n [permissionGroup]=\"group\"\r\n [levelId]=\"levelId()\"\r\n [roleValue]=\"permissionTargetValue()\"\r\n [isGroup]=\"selectedTab() !== 'roles'\"\r\n />\r\n </div>\r\n } @else {\r\n <div class=\"space-y-3 my-5\">\r\n @for (group of permissions(); track group.name) {\r\n <div\r\n class=\"flex flex-row gap-3 rounded-lg border-1 border-surface p-3 transition-colors hover:bg-surface-100 sm:items-center sm:justify-between\"\r\n >\r\n <div class=\"flex min-w-0 items-start gap-3\">\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'editor.dotpoints-02'\"\r\n shape=\"square\"\r\n size=\"normal\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n 'var(--p-' + 'primary' + '-600)'\r\n \"\r\n >\r\n </mt-avatar>\r\n <span class=\"min-w-0 break-words text-sm\">\r\n {{ group.name?.display }}\r\n </span>\r\n </div>\r\n <mt-button\r\n class=\"self-end sm:self-auto\"\r\n [text]=\"true\"\r\n icon=\"custom.pencil\"\r\n severity=\"primary\"\r\n (click)=\"openPermissionDialog(group)\"\r\n >\r\n </mt-button>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noPermissionsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n }\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { 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: "component", type: ToggleField, selector: "mt-toggle-field", inputs: ["label", "inputId", "labelPosition", "placeholder", "readonly", "pInputs", "required", "toggleShape", "size", "icon", "descriptionCard"], outputs: ["onChange"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i2$1.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "size", "fluid", "disabled"], outputs: ["activeChange", "onChange"] }, { kind: "component", type: PermissionsEditDialog, selector: "mt-permissions-edit-dialog", inputs: ["permissionGroup", "inline", "levelId", "roleValue", "isGroup"], outputs: ["closeDialog"] }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
919
919
  }
920
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PermissionsPage, decorators: [{
920
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionsPage, decorators: [{
921
921
  type: Component,
922
922
  args: [{ selector: 'mt-permissions-page', imports: [
923
923
  CommonModule,
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-permissions.mjs","sources":["../../../../packages/masterteam/permissions/src/store/permissions/permissions.model.ts","../../../../packages/masterteam/permissions/src/store/permissions/permissions.actions.ts","../../../../packages/masterteam/permissions/src/store/permissions/permissions.state.ts","../../../../packages/masterteam/permissions/src/store/permissions/permissions.facade.ts","../../../../packages/masterteam/permissions/src/lib/permissions-page/permissions-edit-dialog/permissions-edit-dialog.ts","../../../../packages/masterteam/permissions/src/lib/permissions-page/permissions-edit-dialog/permissions-edit-dialog.html","../../../../packages/masterteam/permissions/src/lib/permissions-page/permissions-page.ts","../../../../packages/masterteam/permissions/src/lib/permissions-page/permissions-page.html","../../../../packages/masterteam/permissions/src/store/index.ts","../../../../packages/masterteam/permissions/src/masterteam-permissions.ts"],"sourcesContent":["import { LoadingStateShape } from '../utils/state-helpers';\r\n\r\nexport interface Role {\r\n name: string;\r\n value: string;\r\n}\r\nexport interface LevelRoles {\r\n level?: string;\r\n levelKey?: string;\r\n scopeType?: string;\r\n scopeId?: string;\r\n roles?: Role[];\r\n}\r\n\r\nexport interface PermissionAction {\r\n id: number;\r\n name: string;\r\n isSelected: boolean;\r\n}\r\n\r\nexport interface PermissionLog {\r\n name: string;\r\n actions: PermissionAction[];\r\n}\r\n\r\nexport interface LevelPermission {\r\n levelName: string;\r\n modules: PermissionLog[];\r\n}\r\n\r\nexport interface RolesResponse {\r\n endpoint: string;\r\n status: number;\r\n code: number;\r\n locale: string;\r\n message: string;\r\n errors: null | string[];\r\n data: LevelRoles[];\r\n cacheSession: string;\r\n}\r\n\r\nexport interface PermissionsResponseData {\r\n modules: PermissionLog[];\r\n}\r\n\r\nexport interface PermissionsResponse {\r\n endpoint: string;\r\n status: number;\r\n code: number;\r\n locale: string;\r\n message: string;\r\n errors: null | string[];\r\n data: PermissionsResponseData;\r\n cacheSession: string;\r\n}\r\n\r\nexport interface GroupPermissionsResponse {\r\n endpoint: string;\r\n status: number;\r\n code: number;\r\n locale: string;\r\n message: string;\r\n errors: null | string[];\r\n data: LevelPermission[];\r\n cacheSession: string;\r\n}\r\n\r\nexport interface UpdatePermissionPayload {\r\n roleValue: string;\r\n levelId: string;\r\n permissions: LevelPermission[];\r\n}\r\n\r\nexport enum PermissionsActionKey {\r\n LoadRoles = 'loadRoles',\r\n SelectRole = 'selectRole',\r\n SelectGroup = 'selectGroup',\r\n LoadPermissions = 'loadPermissions',\r\n LoadGroupPermissions = 'loadGroupPermissions',\r\n UpdatePermission = 'updatePermission',\r\n UpdateGroupPermission = 'updateGroupPermission',\r\n ToggleAllLevelPermissions = 'toggleAllLevelPermissions',\r\n ToggleAllGroupPermissions = 'toggleAllGroupPermissions',\r\n}\r\n\r\nexport interface PermissionsStateModel extends LoadingStateShape<PermissionsActionKey> {\r\n roles: LevelRoles[];\r\n selectedRoleValue: string | null;\r\n selectedGroupValue: string | number | null;\r\n permissions: PermissionLog[];\r\n groupPermissions: LevelPermission[];\r\n currentLevelId: string | null;\r\n moduleType: string;\r\n moduleId: string | number;\r\n parentModuleType?: string | null;\r\n parentModuleId?: string | number | null;\r\n parentPath?: string;\r\n}\r\n\r\nexport enum ModuleType {\r\n MODULE = 'module',\r\n LEVEL = 'level',\r\n LOG = 'log',\r\n LEVELLOG = 'levelLog',\r\n}\r\n","export class LoadRoles {\r\n static readonly type = '[Permissions] Load Roles';\r\n constructor() {}\r\n}\r\n\r\nexport class SelectRole {\r\n static readonly type = '[Permissions] Select Role';\r\n constructor(public roleValue: string) {}\r\n}\r\n\r\nexport class SelectGroup {\r\n static readonly type = '[Permissions] Select Group';\r\n constructor(public groupId: number) {}\r\n}\r\n\r\nexport class LoadPermissions {\r\n static readonly type = '[Permissions] Load Permissions';\r\n constructor(\r\n public roleValue: string,\r\n public levelId: string,\r\n ) {}\r\n}\r\n\r\nexport class LoadGroupPermissions {\r\n static readonly type = '[Permissions] Load Group Permissions';\r\n constructor(\r\n public groupId: number,\r\n public levelId: string,\r\n ) {}\r\n}\r\n\r\nexport class UpdatePermissionLocally {\r\n static readonly type = '[Permissions] Update Permission Locally';\r\n constructor(\r\n public roleValue: string,\r\n public levelId: string,\r\n public actionId: number,\r\n public isSelected: boolean,\r\n ) {}\r\n}\r\n\r\nexport class UpdatePermission {\r\n static readonly type = '[Permissions] Update Permission';\r\n constructor(\r\n public roleValue: string,\r\n public levelId: string,\r\n ) {}\r\n}\r\n\r\nexport class UpdateGroupPermission {\r\n static readonly type = '[Permissions] Update Group Permission';\r\n constructor(\r\n public groupId: string,\r\n public levelId: string,\r\n ) {}\r\n}\r\n\r\nexport class ToggleAllLevelPermissions {\r\n static readonly type = '[Permissions] Toggle All Level Permissions';\r\n constructor(\r\n public roleValue: string,\r\n public levelId: string,\r\n public levelName: string,\r\n public enabled: boolean,\r\n ) {}\r\n}\r\n\r\nexport class ToggleAllGroupPermissions {\r\n static readonly type = '[Permissions] Toggle All Group Permissions';\r\n constructor(\r\n public levelId: string,\r\n public groupId: string,\r\n public enabled: boolean,\r\n ) {}\r\n}\r\n\r\nexport class SetModuleInfo {\r\n static readonly type = '[Permissions] Set Module Info';\r\n\r\n constructor(\r\n public readonly moduleType: string,\r\n public readonly moduleId: string | number,\r\n public readonly parentModuleType?: string,\r\n public readonly parentModuleId?: string | number,\r\n public readonly parentPath?: string,\r\n ) {}\r\n}\r\n\r\nexport class Reset {\r\n static readonly type = '[Permissions] Reset Module Info';\r\n\r\n constructor() {}\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport { map } from 'rxjs';\r\nimport { CrudStateBase, handleApiRequest } from '@masterteam/components';\r\nimport {\r\n GroupPermissionsResponse,\r\n LevelPermission,\r\n LevelRoles,\r\n ModuleType,\r\n PermissionLog,\r\n PermissionsResponse,\r\n PermissionsActionKey,\r\n PermissionsStateModel,\r\n RolesResponse,\r\n} from './permissions.model';\r\nimport * as PermissionsActions from './permissions.actions';\r\n\r\n@State<PermissionsStateModel>({\r\n name: 'permissions',\r\n defaults: {\r\n roles: [],\r\n selectedRoleValue: null,\r\n selectedGroupValue: null,\r\n permissions: [],\r\n groupPermissions: [],\r\n currentLevelId: null,\r\n moduleType: '',\r\n moduleId: '',\r\n parentModuleType: null,\r\n parentModuleId: null,\r\n parentPath: '',\r\n loadingActive: [], // Required by LoadingStateShape\r\n errors: {}, // Required by LoadingStateShape\r\n },\r\n})\r\n@Injectable()\r\nexport class PermissionsState extends CrudStateBase<\r\n LevelRoles,\r\n PermissionsStateModel,\r\n PermissionsActionKey\r\n> {\r\n private http = inject(HttpClient);\r\n\r\n // ============================================================================\r\n // Data Selectors - Individual for fine-grained reactivity\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getRoles(state: PermissionsStateModel): LevelRoles[] {\r\n return state.roles;\r\n }\r\n\r\n @Selector()\r\n static getSelectedRoleValue(state: PermissionsStateModel): string | null {\r\n return state.selectedRoleValue;\r\n }\r\n\r\n @Selector()\r\n static getSelectedGroupValue(\r\n state: PermissionsStateModel,\r\n ): string | number | null {\r\n return state.selectedGroupValue;\r\n }\r\n\r\n @Selector()\r\n static getPermissions(state: PermissionsStateModel): PermissionLog[] {\r\n return state.permissions;\r\n }\r\n\r\n @Selector()\r\n static getGroupPermissions(state: PermissionsStateModel): LevelPermission[] {\r\n return state.groupPermissions;\r\n }\r\n\r\n @Selector()\r\n static getModuleType(state: PermissionsStateModel): string {\r\n return state.moduleType;\r\n }\r\n\r\n @Selector()\r\n static getModuleId(state: PermissionsStateModel): string | number {\r\n return state.moduleId;\r\n }\r\n\r\n @Selector()\r\n static getLevelId(state: PermissionsStateModel): string {\r\n const scopeId = resolveActiveScopeId(state);\r\n return scopeId != null ? scopeId.toString() : '';\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: PermissionsStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(\r\n state: PermissionsStateModel,\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\r\n // ============================================================================\r\n // CRUD Actions\r\n // ============================================================================\r\n\r\n @Action(PermissionsActions.LoadRoles)\r\n loadRoles(ctx: StateContext<PermissionsStateModel>) {\r\n const { moduleType, moduleId, parentPath } = ctx.getState();\r\n const state = ctx.getState();\r\n const req$ = this.http\r\n .get<RolesResponse>(\r\n `identity/roles${parentPath ? '' : '/scopes'}${parentPath}/${moduleType}/${moduleId}${parentPath ? '' : '?inherited=true'}`,\r\n )\r\n .pipe(map((response) => response.data));\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.LoadRoles,\r\n request$: req$,\r\n onSuccess: (roles: any) => ({\r\n roles: state.moduleType === 'module' ? [{ roles: roles }] : roles,\r\n currentLevelId: resolveActiveScopeId(state)?.toString() ?? null,\r\n }),\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Simple State Updates (No HTTP)\r\n // ============================================================================\r\n\r\n @Action(PermissionsActions.SelectRole)\r\n selectRole(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.SelectRole,\r\n ) {\r\n const state = ctx.getState();\r\n ctx.patchState({ selectedRoleValue: action.roleValue });\r\n\r\n if (state.currentLevelId && action.roleValue) {\r\n ctx.dispatch(\r\n new PermissionsActions.LoadPermissions(\r\n action.roleValue,\r\n state.currentLevelId,\r\n ),\r\n );\r\n }\r\n }\r\n\r\n @Action(PermissionsActions.SelectGroup)\r\n selectGroup(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.SelectGroup,\r\n ) {\r\n const state = ctx.getState();\r\n ctx.patchState({ selectedGroupValue: action.groupId });\r\n\r\n if (state.currentLevelId) {\r\n ctx.dispatch(\r\n new PermissionsActions.LoadGroupPermissions(\r\n action.groupId,\r\n state.currentLevelId,\r\n ),\r\n );\r\n }\r\n }\r\n\r\n @Action(PermissionsActions.LoadPermissions)\r\n loadPermissions(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.LoadPermissions,\r\n ) {\r\n const state = ctx.getState();\r\n const scopePath = resolvePermissionScopePath(state);\r\n\r\n const req$ = this.http\r\n .get<PermissionsResponse>(\r\n `identity/roles/${scopePath}/${action.roleValue}/permissions`,\r\n )\r\n .pipe(map((response) => response.data.modules));\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.LoadPermissions,\r\n request$: req$,\r\n onSuccess: (permissions) => ({\r\n permissions,\r\n }),\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.LoadGroupPermissions)\r\n loadGroupPermissions(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.LoadGroupPermissions,\r\n ) {\r\n const state = ctx.getState();\r\n const scopePath = resolvePermissionScopePath(state);\r\n\r\n const req$ = this.http\r\n .get<GroupPermissionsResponse>(\r\n `identity/groups/${scopePath}/${action.groupId}/permissions`,\r\n )\r\n .pipe(map((response: any) => response.data.modules));\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.LoadPermissions,\r\n request$: req$,\r\n onSuccess: (permissions) => ({\r\n permissions,\r\n }),\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.UpdatePermissionLocally)\r\n updatePermissionLocally(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.UpdatePermissionLocally,\r\n ) {\r\n const state = ctx.getState();\r\n\r\n const updatedPermissions = state.permissions.map((log) => ({\r\n ...log,\r\n actions: log.actions.map((act) =>\r\n act.id === action.actionId\r\n ? { ...act, isSelected: action.isSelected }\r\n : act,\r\n ),\r\n }));\r\n\r\n ctx.patchState({ permissions: updatedPermissions });\r\n }\r\n\r\n // ============================================================================\r\n // Complex Operations - use handleApiRequest for transformations\r\n // ============================================================================\r\n\r\n @Action(PermissionsActions.UpdatePermission)\r\n updatePermission(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.UpdatePermission,\r\n ) {\r\n const state = ctx.getState();\r\n const updatedPermissions: any[] = [];\r\n state.permissions?.forEach((p) => {\r\n p?.actions.forEach((a: any) => {\r\n updatedPermissions.push({ id: a?.id, isSelected: a?.isSelected });\r\n });\r\n });\r\n const { scopeId, scopeType } = resolvePermissionMutationScope(state);\r\n\r\n const req$ = this.http.put<PermissionsResponse>(\r\n `identity/roles/${action.roleValue}/setAllPermissions`,\r\n { permissions: updatedPermissions },\r\n {\r\n params: {\r\n scopeId,\r\n scopeType,\r\n },\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.UpdatePermission,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n onError: (error, currentState) => {\r\n // Rollback on error\r\n return { permissions: currentState.permissions };\r\n },\r\n errorMessage: 'Failed to update permission',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.UpdateGroupPermission)\r\n updateGroupPermission(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.UpdateGroupPermission,\r\n ) {\r\n const state = ctx.getState();\r\n const updatedPermissions: any[] = [];\r\n state.permissions?.forEach((p) => {\r\n p?.actions.forEach((a: any) => {\r\n updatedPermissions.push({ id: a?.id, isSelected: a?.isSelected });\r\n });\r\n });\r\n\r\n const req$ = this.http.put<PermissionsResponse>(\r\n `identity/groups/${action.groupId}/setAllPermissions`,\r\n { permissions: updatedPermissions },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.UpdateGroupPermission,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n onError: (error, currentState) => {\r\n // Rollback on error\r\n return { permissions: currentState.permissions };\r\n },\r\n errorMessage: 'Failed to update permission',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.ToggleAllLevelPermissions)\r\n toggleAllLevelPermissions(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.ToggleAllLevelPermissions,\r\n ) {\r\n const state = ctx.getState();\r\n\r\n const updatedPermissions: any[] = [];\r\n state.permissions?.forEach((p) => {\r\n p?.actions.forEach((a: any) => {\r\n updatedPermissions.push({ id: a?.id, isSelected: action.enabled });\r\n });\r\n });\r\n\r\n const { scopeId, scopeType } = resolvePermissionMutationScope(state);\r\n\r\n const req$ = this.http.put<PermissionsResponse>(\r\n `identity/roles/${action.roleValue}/setAllPermissions`,\r\n { permissions: updatedPermissions },\r\n {\r\n params: {\r\n scopeId,\r\n scopeType,\r\n },\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.ToggleAllLevelPermissions,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n onError: () => ({\r\n permissions: state.permissions,\r\n }),\r\n errorMessage: 'Failed to toggle all permissions',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.ToggleAllGroupPermissions)\r\n toggleAllGroupPermissions(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.ToggleAllGroupPermissions,\r\n ) {\r\n const state = ctx.getState();\r\n\r\n const updatedPermissions: any[] = [];\r\n state.permissions?.forEach((p) => {\r\n p?.actions.forEach((a: any) => {\r\n updatedPermissions.push({ id: a?.id, isSelected: action.enabled });\r\n });\r\n });\r\n\r\n const req$ = this.http.put<PermissionsResponse>(\r\n `identity/groups/${action.groupId}/setAllPermissions`,\r\n { permissions: updatedPermissions },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.ToggleAllGroupPermissions,\r\n request$: req$,\r\n onSuccess: () => ({\r\n permissions: state.permissions.map((permissionGroup) => ({\r\n ...permissionGroup,\r\n actions: permissionGroup.actions.map((permission) => ({\r\n ...permission,\r\n isSelected: action.enabled,\r\n })),\r\n })),\r\n }),\r\n onError: () => ({\r\n permissions: state.permissions,\r\n }),\r\n errorMessage: 'Failed to toggle all permissions',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.SetModuleInfo)\r\n setModuleInfo(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.SetModuleInfo,\r\n ) {\r\n let parentPath = '';\r\n if (action.parentModuleType && action.parentModuleId) {\r\n parentPath = `/${action.parentModuleType}/${action.parentModuleId}`;\r\n } else if (action.parentPath) {\r\n parentPath = action.parentPath;\r\n }\r\n ctx.patchState({\r\n moduleType: action.moduleType,\r\n moduleId: action.moduleId,\r\n parentModuleType: action.parentModuleType ?? null,\r\n parentModuleId: action.parentModuleId ?? null,\r\n parentPath: parentPath ?? '',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.Reset)\r\n reset(ctx: StateContext<PermissionsStateModel>) {\r\n ctx.patchState({\r\n moduleType: '',\r\n moduleId: '',\r\n parentModuleType: null,\r\n parentModuleId: null,\r\n parentPath: '',\r\n roles: [],\r\n selectedRoleValue: null,\r\n selectedGroupValue: null,\r\n permissions: [],\r\n groupPermissions: [],\r\n });\r\n }\r\n}\r\n\r\nfunction hasParentScope(state: PermissionsStateModel): boolean {\r\n return (\r\n state.parentModuleId !== null &&\r\n state.parentModuleId !== undefined &&\r\n state.parentModuleId !== ''\r\n );\r\n}\r\n\r\nfunction resolveActiveScopeId(\r\n state: PermissionsStateModel,\r\n): string | number | null {\r\n if (state.moduleType === 'module') {\r\n return hasParentScope(state) ? state.parentModuleId! : state.moduleId;\r\n }\r\n\r\n return state.moduleId;\r\n}\r\n\r\nfunction resolvePermissionMutationScope(state: PermissionsStateModel): {\r\n scopeId: string | number;\r\n scopeType: ModuleType;\r\n} {\r\n if (state.moduleType === 'module' && !hasParentScope(state)) {\r\n return {\r\n scopeId: state.moduleId,\r\n scopeType: ModuleType.MODULE,\r\n };\r\n }\r\n\r\n return {\r\n scopeId: resolveActiveScopeId(state) ?? '',\r\n scopeType: ModuleType.LEVEL,\r\n };\r\n}\r\n\r\nfunction resolvePermissionScopePath(state: PermissionsStateModel): string {\r\n return `${state.parentPath ?? ''}/${state.moduleType}/${state.moduleId}`\r\n .replace(/\\/+/g, '/')\r\n .replace(/^\\//, '');\r\n}\r\n","import { inject, Injectable, computed } from '@angular/core';\r\nimport { Store, select } from '@ngxs/store';\r\nimport { PermissionsState } from './permissions.state';\r\nimport * as PermissionsActions from './permissions.actions';\r\nimport { Observable } from 'rxjs';\r\nimport { PermissionsActionKey } from './permissions.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PermissionsFacade {\r\n private store = inject(Store);\r\n\r\n // ============================================================================\r\n // Data Selectors - Memoized by NGXS (fine-grained reactivity)\r\n // ============================================================================\r\n readonly roles = select(PermissionsState.getRoles);\r\n readonly selectedRoleValue = select(PermissionsState.getSelectedRoleValue);\r\n readonly selectedGroupValue = select(PermissionsState.getSelectedGroupValue);\r\n readonly permissions = select(PermissionsState.getPermissions);\r\n readonly groupPermissions = select(PermissionsState.getGroupPermissions);\r\n readonly moduleType = select(PermissionsState.getModuleType);\r\n readonly moduleId = select(PermissionsState.getModuleId);\r\n readonly levelId = select(PermissionsState.getLevelId);\r\n\r\n // ============================================================================\r\n // Loading/Error Slices - Memoized by NGXS\r\n // ============================================================================\r\n private readonly loadingActive = select(PermissionsState.getLoadingActive);\r\n private readonly errors = select(PermissionsState.getErrors);\r\n\r\n // ============================================================================\r\n // Loading Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly isLoadingRoles = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.LoadRoles),\r\n );\r\n readonly isLoadingPermissions = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.LoadPermissions),\r\n );\r\n readonly isLoadingGroupPermissions = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.LoadGroupPermissions),\r\n );\r\n readonly isUpdatingPermission = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.UpdatePermission),\r\n );\r\n readonly isUpdatingGroupPermission = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.UpdateGroupPermission),\r\n );\r\n readonly isTogglingLevelPermissions = computed(() =>\r\n this.loadingActive().includes(\r\n PermissionsActionKey.ToggleAllLevelPermissions,\r\n ),\r\n );\r\n readonly isTogglingGroupPermissions = computed(() =>\r\n this.loadingActive().includes(\r\n PermissionsActionKey.ToggleAllGroupPermissions,\r\n ),\r\n );\r\n\r\n // ============================================================================\r\n // Error Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly rolesError = computed(\r\n () => this.errors()[PermissionsActionKey.LoadRoles] ?? null,\r\n );\r\n readonly permissionsError = computed(\r\n () => this.errors()[PermissionsActionKey.LoadPermissions] ?? null,\r\n );\r\n readonly groupPermissionsError = computed(\r\n () => this.errors()[PermissionsActionKey.LoadGroupPermissions] ?? null,\r\n );\r\n readonly updatePermissionError = computed(\r\n () => this.errors()[PermissionsActionKey.UpdatePermission] ?? null,\r\n );\r\n readonly updateGroupPermissionError = computed(\r\n () => this.errors()[PermissionsActionKey.UpdateGroupPermission] ?? null,\r\n );\r\n\r\n // ============================================================================\r\n // Action Dispatchers\r\n // ============================================================================\r\n\r\n loadRoles() {\r\n return this.store.dispatch(new PermissionsActions.LoadRoles());\r\n }\r\n\r\n selectRole(roleValue: string) {\r\n return this.store.dispatch(new PermissionsActions.SelectRole(roleValue));\r\n }\r\n\r\n selectGroup(groupId: number) {\r\n if (groupId) {\r\n return this.store.dispatch(new PermissionsActions.SelectGroup(groupId));\r\n }\r\n return;\r\n }\r\n\r\n loadPermissions(roleValue: string, levelId: string) {\r\n return this.store.dispatch(\r\n new PermissionsActions.LoadPermissions(roleValue, levelId),\r\n );\r\n }\r\n\r\n loadGroupPermissions(groupId: number, levelId: string) {\r\n return this.store.dispatch(\r\n new PermissionsActions.LoadGroupPermissions(groupId, levelId),\r\n );\r\n }\r\n\r\n updatePermissionLocally(\r\n roleValue: string,\r\n levelId: string,\r\n actionId: number,\r\n isSelected: boolean,\r\n ) {\r\n return this.store.dispatch(\r\n new PermissionsActions.UpdatePermissionLocally(\r\n roleValue,\r\n levelId,\r\n actionId,\r\n isSelected,\r\n ),\r\n );\r\n }\r\n\r\n updatePermission(roleValue: string, levelId: string) {\r\n return this.store.dispatch(\r\n new PermissionsActions.UpdatePermission(roleValue, levelId),\r\n );\r\n }\r\n updateGroupPermission(groupId: string, levelId: string) {\r\n return this.store.dispatch(\r\n new PermissionsActions.UpdateGroupPermission(groupId, levelId),\r\n );\r\n }\r\n\r\n toggleAllLevelPermissions(\r\n roleValue: string,\r\n levelId: string,\r\n levelName: string,\r\n enabled: boolean,\r\n ) {\r\n return this.store.dispatch(\r\n new PermissionsActions.ToggleAllLevelPermissions(\r\n roleValue,\r\n levelId,\r\n levelName,\r\n enabled,\r\n ),\r\n );\r\n }\r\n toggleAllGroupPermissions(\r\n levelId: string,\r\n groupId: string,\r\n enabled: boolean,\r\n ) {\r\n return this.store.dispatch(\r\n new PermissionsActions.ToggleAllGroupPermissions(\r\n levelId,\r\n groupId,\r\n enabled,\r\n ),\r\n );\r\n }\r\n setModuleInfo(\r\n moduleType: string,\r\n moduleId: string | number,\r\n parentModuleType?: string,\r\n parentModuleId?: string | number,\r\n parentPath?: string,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(\r\n new PermissionsActions.SetModuleInfo(\r\n moduleType,\r\n moduleId,\r\n parentModuleType,\r\n parentModuleId,\r\n parentPath,\r\n ),\r\n );\r\n }\r\n\r\n reset() {\r\n return this.store.dispatch(new PermissionsActions.Reset());\r\n }\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { PermissionsFacade } from '../../../store/permissions/permissions.facade';\r\nimport {\r\n PermissionLog,\r\n PermissionAction,\r\n} from '../../../store/permissions/permissions.model';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { Button } from '@masterteam/components/button';\r\n\r\n@Component({\r\n selector: 'mt-permissions-edit-dialog',\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n ToggleField,\r\n TranslocoModule,\r\n FormsModule,\r\n Button,\r\n ],\r\n templateUrl: './permissions-edit-dialog.html',\r\n styleUrl: './permissions-edit-dialog.scss',\r\n})\r\nexport class PermissionsEditDialog {\r\n private permissionsFacade = inject(PermissionsFacade);\r\n modal = inject(ModalService, { optional: true });\r\n ref = inject(ModalRef, { optional: true });\r\n permissionGroup = input<PermissionLog | null>(null);\r\n inline = input(false);\r\n\r\n // Use new facade pattern\r\n addPermissionsLoading = this.permissionsFacade.isUpdatingPermission;\r\n addPermissionsError = this.permissionsFacade.updatePermissionError;\r\n\r\n levelId = input.required<string>();\r\n roleValue = input.required<string>();\r\n isGroup = input.required<boolean>();\r\n\r\n closeDialog = output<void>();\r\n\r\n actionControls = signal<Map<number, FormControl>>(new Map());\r\n toggleAll = signal<boolean>(false);\r\n contentClass = computed(() =>\r\n this.inline()\r\n ? 'flex flex-col gap-3'\r\n : `flex flex-col gap-3 p-4 ${this.modal?.contentClass ?? ''}`,\r\n );\r\n footerClass = computed(() =>\r\n this.inline() ? 'mt-4 flex justify-end' : (this.modal?.footerClass ?? ''),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const group = this.permissionGroup();\r\n if (group) {\r\n const controls = new Map<number, FormControl>();\r\n group.actions.forEach((action) => {\r\n const control = new FormControl(action.isSelected);\r\n control.valueChanges.subscribe((value) => {\r\n if (value !== null) {\r\n this.onPermissionToggle(action.id, value);\r\n }\r\n });\r\n controls.set(action.id, control);\r\n });\r\n this.actionControls.set(controls);\r\n this.toggleAll.set(group.actions.every((action) => action.isSelected));\r\n }\r\n });\r\n }\r\n\r\n onPermissionToggle(actionId: number, isSelected: boolean) {\r\n const levelId = this.levelId();\r\n const roleValue = this.roleValue();\r\n if (levelId && roleValue) {\r\n this.permissionsFacade.updatePermissionLocally(\r\n roleValue,\r\n levelId,\r\n actionId,\r\n isSelected,\r\n );\r\n }\r\n }\r\n\r\n onClose() {\r\n this.ref?.close();\r\n }\r\n\r\n trackByActionId(_index: number, action: PermissionAction) {\r\n return action.id;\r\n }\r\n\r\n getControl(actionId: number): FormControl {\r\n return this.actionControls().get(actionId) || new FormControl(false);\r\n }\r\n\r\n onSave(): void {\r\n const levelId = this.levelId();\r\n const roleValue = this.roleValue();\r\n const isGroup = this.isGroup();\r\n if (levelId && roleValue) {\r\n let subscription;\r\n if (isGroup) {\r\n subscription = this.permissionsFacade.updateGroupPermission(\r\n roleValue,\r\n levelId,\r\n );\r\n } else {\r\n subscription = this.permissionsFacade.updatePermission(\r\n roleValue,\r\n levelId,\r\n );\r\n }\r\n subscription.subscribe({\r\n next: () => {\r\n if (!this.inline()) {\r\n this.onClose();\r\n }\r\n },\r\n error: (error: any) => {\r\n console.error('Failed to save accessibility permissions:', error);\r\n },\r\n });\r\n }\r\n }\r\n\r\n selectAll() {\r\n const group = this.permissionGroup();\r\n const actions = group?.actions || [];\r\n for (let i = 0; i < actions?.length; i++) {\r\n const control = this.actionControls().get(actions[i].id);\r\n control?.setValue(this.toggleAll());\r\n }\r\n }\r\n}\r\n","<div [class]=\"contentClass()\">\r\n @if (permissionGroup(); as group) {\r\n <div\r\n class=\"mb-4 flex flex-row gap-3 rounded-lg border border-surface p-3 sm:flex-row sm:items-center sm:justify-between\"\r\n >\r\n <span class=\"text-sm font-medium\">{{\r\n \"permissions.selectAll\" | transloco\r\n }}</span>\r\n <mt-toggle-field\r\n class=\"self-end shrink-0 sm:self-center\"\r\n [(ngModel)]=\"toggleAll\"\r\n (onChange)=\"selectAll()\"\r\n ></mt-toggle-field>\r\n </div>\r\n @for (action of group.actions; track trackByActionId($index, action)) {\r\n <div\r\n class=\"flex flex-row gap-3 rounded-lg border border-surface p-3 sm:flex-row sm:items-center sm:justify-between\"\r\n >\r\n <span class=\"min-w-0 break-words text-sm font-medium\">{{\r\n action.name?.display\r\n }}</span>\r\n <mt-toggle-field\r\n class=\"self-end shrink-0 sm:self-center\"\r\n [formControl]=\"getControl(action.id)\"\r\n ></mt-toggle-field>\r\n </div>\r\n }\r\n }\r\n</div>\r\n<div [class]=\"footerClass()\">\r\n <mt-button\r\n class=\"w-full sm:w-auto\"\r\n [label]=\"'save' | transloco\"\r\n (click)=\"onSave()\"\r\n [loading]=\"addPermissionsLoading()\"\r\n />\r\n</div>\r\n","import {\r\n Component,\r\n computed,\r\n DestroyRef,\r\n effect,\r\n inject,\r\n linkedSignal,\r\n OnDestroy,\r\n OnInit,\r\n signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { PermissionsFacade } from '../../store/permissions/permissions.facade';\r\nimport { PermissionLog } from '../../store/permissions/permissions.model';\r\nimport { PermissionsEditDialog } from './permissions-edit-dialog/permissions-edit-dialog';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { AccessibilitiesFacade } from '@masterteam/accessibilities';\r\n\r\n@Component({\r\n selector: 'mt-permissions-page',\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n Card,\r\n Button,\r\n ToggleField,\r\n TranslocoModule,\r\n Avatar,\r\n SkeletonModule,\r\n Tabs,\r\n PermissionsEditDialog,\r\n ],\r\n templateUrl: './permissions-page.html',\r\n styleUrl: './permissions-page.scss',\r\n})\r\nexport default class PermissionsPage implements OnInit, OnDestroy {\r\n private readonly permissionsFacade = inject(PermissionsFacade);\r\n private readonly accessibilitiesFacade: any = inject(AccessibilitiesFacade);\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly router = inject(Router);\r\n private readonly translocoService = inject(TranslocoService);\r\n private readonly modal = inject(ModalService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n private readonly defaultLevelName = 'Project';\r\n\r\n // Use new facade pattern\r\n levelRoles = this.permissionsFacade.roles;\r\n selectedRoleValue = this.permissionsFacade.selectedRoleValue;\r\n selectedRole = computed(() => this.selectedRoleValue() ?? '');\r\n selectedGroupValue = this.permissionsFacade.selectedGroupValue;\r\n selectedGroup = computed(() => this.selectedGroupValue());\r\n permissions = this.permissionsFacade.permissions;\r\n loading = this.permissionsFacade.isLoadingRoles;\r\n permissionsLoading = this.permissionsFacade.isLoadingPermissions;\r\n levelId = this.permissionsFacade.levelId;\r\n groups = this.accessibilitiesFacade.groups;\r\n\r\n allPermissionsToggle = new FormControl<boolean>(false);\r\n\r\n readonly groupOrRoleId = computed(() => {\r\n const idParam = this.route.snapshot.firstChild?.paramMap.get('id');\r\n return idParam ? idParam : '';\r\n });\r\n\r\n readonly selectedTabFromParams = computed(() => {\r\n const idParam = this.route.snapshot.firstChild?.data['selectedTab'];\r\n return idParam ? idParam : 'roles';\r\n });\r\n readonly permissionTargetValue = computed(() =>\r\n this.selectedTab() === 'roles'\r\n ? (this.selectedRoleValue() ?? '')\r\n : (this.selectedGroup()?.toString() ?? ''),\r\n );\r\n readonly singlePermissionGroup = computed<PermissionLog | null>(() => {\r\n const permissionGroups = this.permissions();\r\n return permissionGroups.length === 1 ? permissionGroups[0] : null;\r\n });\r\n\r\n selectedTab = linkedSignal<string>(this.selectedTabFromParams);\r\n tabsList = signal<any[]>([\r\n {\r\n label: this.translocoService.translate('permissions.roles'),\r\n value: 'roles',\r\n },\r\n {\r\n label: this.translocoService.translate('permissions.groups'),\r\n value: 'groups',\r\n },\r\n ]);\r\n firstLoad = signal(true);\r\n\r\n constructor() {\r\n effect(() => {\r\n const allEnabled = this.isAllPermissionsEnabled();\r\n this.allPermissionsToggle.setValue(allEnabled, { emitEvent: false });\r\n });\r\n effect(() => {\r\n if (this.selectedTab() == 'roles') {\r\n if (this.levelRoles().length == 0) {\r\n if (this.firstLoad() && !this.loading()) {\r\n this.permissionsFacade.loadRoles();\r\n this.firstLoad.set(false);\r\n }\r\n return;\r\n }\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (this.selectedTab() !== 'roles' || this.loading()) {\r\n return;\r\n }\r\n\r\n const roles = this.getRoles();\r\n if (!roles.length) {\r\n return;\r\n }\r\n\r\n const routeRoleValue = this.groupOrRoleId()?.toString();\r\n const selectedRoleValue = this.selectedRoleValue();\r\n const routeRole = routeRoleValue\r\n ? roles.find((role) => role?.value === routeRoleValue)\r\n : null;\r\n\r\n if (routeRole) {\r\n if (selectedRoleValue !== routeRole.value) {\r\n this.permissionsFacade.selectRole(routeRole.value);\r\n }\r\n return;\r\n }\r\n\r\n if (\r\n selectedRoleValue &&\r\n roles.some((role) => role?.value === selectedRoleValue)\r\n ) {\r\n return;\r\n }\r\n\r\n this.selectFirstRole(true);\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.permissionsFacade.selectRole('');\r\n this.permissionsFacade.loadRoles();\r\n this.accessibilitiesFacade.getGroups();\r\n\r\n this.allPermissionsToggle.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((value) => {\r\n if (value !== null) {\r\n this.onToggleAllLevel(this.defaultLevelName, value);\r\n }\r\n });\r\n }\r\n\r\n selectRole(roleValue: string): void {\r\n this.router.navigate(['roles', roleValue], { relativeTo: this.route });\r\n this.permissionsFacade.selectRole(roleValue);\r\n }\r\n\r\n private getRoles() {\r\n return this.levelRoles()\r\n .map((levelRoles) => levelRoles.roles ?? [])\r\n .flat();\r\n }\r\n\r\n private selectFirstRole(replaceUrl = false): void {\r\n const firstRoleValue = this.getRoles()[0]?.value;\r\n\r\n if (!firstRoleValue) {\r\n return;\r\n }\r\n\r\n this.router.navigate(['roles', firstRoleValue], {\r\n relativeTo: this.route,\r\n replaceUrl,\r\n });\r\n this.permissionsFacade.selectRole(firstRoleValue);\r\n }\r\n\r\n selectGroup(groupId: number): void {\r\n this.router.navigate(['groups', groupId], { relativeTo: this.route });\r\n this.permissionsFacade.selectGroup(groupId);\r\n }\r\n\r\n openPermissionDialog(group: PermissionLog): void {\r\n if (this.levelId() && (this.selectedRoleValue() || this.selectedGroup())) {\r\n this.modal.openModal(PermissionsEditDialog, 'drawer', {\r\n header: this.translocoService.translate('permissions.setPermissions'),\r\n position: 'end',\r\n styleClass:\r\n '!absolute !shadow-none !w-full !max-w-full sm:!w-[30rem] xl:!w-[24%]',\r\n appendTo: 'page-content',\r\n inputValues: {\r\n permissionGroup: group,\r\n levelId: this.levelId(),\r\n roleValue:\r\n this.selectedTab() == 'roles'\r\n ? this.selectedRoleValue()\r\n : this.selectedGroup(),\r\n isGroup: this.selectedTab() != 'roles',\r\n },\r\n dismissible: true,\r\n });\r\n }\r\n }\r\n\r\n onToggleAllLevel(levelName: string, enabled: boolean): void {\r\n const levelId = this.levelId();\r\n const roleValue = this.selectedRoleValue();\r\n\r\n if (levelId) {\r\n if (this.selectedTab() != 'roles') {\r\n this.permissionsFacade.toggleAllGroupPermissions(\r\n levelId,\r\n this.selectedGroup()!.toString(),\r\n enabled,\r\n );\r\n return;\r\n } else {\r\n if (!!roleValue) {\r\n this.permissionsFacade.toggleAllLevelPermissions(\r\n roleValue,\r\n levelId,\r\n levelName,\r\n enabled,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n isAllPermissionsEnabled(): boolean {\r\n if (this.permissions().length === 0) return false;\r\n\r\n return this.permissions().every((log) =>\r\n log?.actions.every((action) => action?.isSelected),\r\n );\r\n }\r\n\r\n trackByRoleValue(_index: number, role: any) {\r\n return role.value;\r\n }\r\n\r\n onTabChange($event: any) {\r\n if ($event == 'roles') {\r\n if (this.levelRoles().length) {\r\n this.selectFirstRole();\r\n } else {\r\n this.router.navigate(['roles'], { relativeTo: this.route });\r\n }\r\n } else if ($event == 'groups') {\r\n // Navigate to first group if available\r\n const firstGroup = this.groups()[0];\r\n\r\n if (firstGroup?.id) {\r\n this.router.navigate(['groups', firstGroup.id], {\r\n relativeTo: this.route,\r\n });\r\n this.permissionsFacade.selectGroup(firstGroup.id);\r\n } else {\r\n this.router.navigate(['groups'], { relativeTo: this.route });\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.permissionsFacade.reset();\r\n }\r\n}\r\n","<div\r\n id=\"permissions-page-card\"\r\n class=\"grid h-full min-h-0 w-full grid-cols-[minmax(18rem,22rem)_minmax(0,1fr)] gap-4 p-1 max-[1025px]:h-auto max-[1025px]:grid-cols-1 max-[1025px]:gap-3\"\r\n>\r\n <div class=\"min-h-0 min-w-0\">\r\n <mt-card class=\"h-full max-[1025px]:h-auto\">\r\n <ng-template #headless>\r\n <div class=\"flex h-full min-h-0 flex-col\">\r\n <div\r\n class=\"p-4 pb-0 bg-surface-50 rounded-t-2xl border-b border-surface\"\r\n >\r\n <h2 class=\"text-lg font-semibold mb-3\">\r\n {{ \"permissions.rolesAndGroups\" | transloco }}\r\n </h2>\r\n\r\n <div class=\"overflow-x-auto pb-4\">\r\n <mt-tabs\r\n class=\"min-w-max\"\r\n [(active)]=\"selectedTab\"\r\n [options]=\"tabsList()\"\r\n size=\"large\"\r\n (onChange)=\"onTabChange($event)\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex-1 overflow-y-auto p-4 max-[1025px]:max-h-[42vh]\">\r\n @if (loading()) {\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n } @else {\r\n @if (selectedTab() === \"roles\") {\r\n @for (level of levelRoles(); track level) {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n <h2 class=\"font-semibold\">{{ level?.level?.display }}</h2>\r\n @for (role of level.roles; track role.value) {\r\n <div\r\n class=\"flex items-start gap-3 rounded-lg border-2 border-dashed border-gray-300 p-3 transition-colors cursor-pointer\"\r\n [class.bg-primary-50]=\"selectedRole() === role.value\"\r\n [class.hover:bg-surface-100]=\"\r\n selectedRole() !== role.value\r\n \"\r\n [class.border-primary-400]=\"\r\n selectedRole() === role.value\r\n \"\r\n [style.--p-avatar-background]=\"\r\n selectedRole() === role.value\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedRole() === role.value ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectRole(role.value)\"\r\n >\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'user.user-check-01'\"\r\n shape=\"square\"\r\n >\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ role.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noRolesFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noLevelRolesFound\" | transloco }}\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n @for (group of groups(); track group.name) {\r\n <div\r\n class=\"flex items-start gap-3 rounded-lg border-2 border-dashed border-gray-300 p-3 transition-colors cursor-pointer\"\r\n [class.bg-primary-50]=\"selectedGroup() === group.id\"\r\n [class.hover:bg-surface-100]=\"\r\n selectedGroup() !== group.id\r\n \"\r\n [class.border-primary-400]=\"selectedGroup() === group.id\"\r\n [style.--p-avatar-background]=\"\r\n selectedGroup() === group.id\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedGroup() === group.id ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectGroup(group.id)\"\r\n >\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'user.users-check'\"\r\n shape=\"square\"\r\n >\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ group.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noGroupsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n </div>\r\n\r\n <div class=\"min-h-0 min-w-0\">\r\n @if (!selectedRole() && !selectedGroup()) {\r\n <mt-card class=\"h-full max-[1025px]:h-auto\">\r\n <ng-template #headless>\r\n <div\r\n class=\"flex h-full min-h-[16rem] items-center justify-center p-6 text-center text-muted-color\"\r\n >\r\n {{ \"permissions.selectRoleOrGroupToViewPermissions\" | transloco }}\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n } @else {\r\n <mt-card class=\"h-full max-[1025px]:h-auto\">\r\n <ng-template #headless>\r\n <div class=\"flex h-full min-h-0 flex-col\">\r\n <div class=\"mb-5 border-b border-surface p-4 pb-2\">\r\n <h2 class=\"mb-3 text-lg font-semibold\">\r\n {{ \"permissions.permissions\" | transloco }}\r\n </h2>\r\n </div>\r\n @if (permissionsLoading()) {\r\n <div class=\"mx-4\">\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"mx-4 mb-5 flex flex-row gap-3 rounded-lg border-1 border-surface p-3 sm:items-center sm:justify-between\"\r\n >\r\n <div class=\"flex min-w-0 items-start gap-3\">\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'security.lock-unlocked-01'\"\r\n shape=\"square\"\r\n size=\"large\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"'var(--p-' + 'primary' + '-600)'\"\r\n >\r\n </mt-avatar>\r\n <div class=\"min-w-0\">\r\n <div class=\"text-sm font-semibold\">\r\n {{ \"permissions.setAllPermissions\" | transloco }}\r\n </div>\r\n <div class=\"text-xs text-muted-color break-words\">\r\n {{ \"permissions.recommendedForSimpleForms\" | transloco }}\r\n </div>\r\n </div>\r\n </div>\r\n <mt-toggle-field\r\n class=\"self-end shrink-0 sm:self-center\"\r\n [formControl]=\"allPermissionsToggle\"\r\n ></mt-toggle-field>\r\n </div>\r\n\r\n <div\r\n class=\"min-h-0 flex-1 overflow-y-auto border-t border-surface px-4\"\r\n >\r\n @if (singlePermissionGroup(); as group) {\r\n <div\r\n class=\"my-5 rounded-lg border border-surface bg-surface-50 p-4\"\r\n >\r\n <div class=\"mb-4 flex items-start gap-3\">\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'editor.dotpoints-02'\"\r\n shape=\"square\"\r\n size=\"normal\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n 'var(--p-' + 'primary' + '-600)'\r\n \"\r\n >\r\n </mt-avatar>\r\n <span class=\"min-w-0 break-words text-sm font-medium\">\r\n {{ group.name?.display }}\r\n </span>\r\n </div>\r\n\r\n <mt-permissions-edit-dialog\r\n [inline]=\"true\"\r\n [permissionGroup]=\"group\"\r\n [levelId]=\"levelId()\"\r\n [roleValue]=\"permissionTargetValue()\"\r\n [isGroup]=\"selectedTab() !== 'roles'\"\r\n />\r\n </div>\r\n } @else {\r\n <div class=\"space-y-3 my-5\">\r\n @for (group of permissions(); track group.name) {\r\n <div\r\n class=\"flex flex-row gap-3 rounded-lg border-1 border-surface p-3 transition-colors hover:bg-surface-100 sm:items-center sm:justify-between\"\r\n >\r\n <div class=\"flex min-w-0 items-start gap-3\">\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'editor.dotpoints-02'\"\r\n shape=\"square\"\r\n size=\"normal\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n 'var(--p-' + 'primary' + '-600)'\r\n \"\r\n >\r\n </mt-avatar>\r\n <span class=\"min-w-0 break-words text-sm\">\r\n {{ group.name?.display }}\r\n </span>\r\n </div>\r\n <mt-button\r\n class=\"self-end sm:self-auto\"\r\n [text]=\"true\"\r\n icon=\"custom.pencil\"\r\n severity=\"primary\"\r\n (click)=\"openPermissionDialog(group)\"\r\n >\r\n </mt-button>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noPermissionsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n }\r\n </div>\r\n</div>\r\n","// store/index.ts\r\nexport * from './permissions';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["PermissionsActions.LoadPermissions","PermissionsActions.LoadGroupPermissions","PermissionsActions.LoadRoles","PermissionsActions.SelectRole","PermissionsActions.SelectGroup","PermissionsActions.UpdatePermissionLocally","PermissionsActions.UpdatePermission","PermissionsActions.UpdateGroupPermission","PermissionsActions.ToggleAllLevelPermissions","PermissionsActions.ToggleAllGroupPermissions","PermissionsActions.SetModuleInfo","PermissionsActions.Reset","i2","i3"],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-permissions.mjs","sources":["../../../../packages/masterteam/permissions/src/store/permissions/permissions.model.ts","../../../../packages/masterteam/permissions/src/store/permissions/permissions.actions.ts","../../../../packages/masterteam/permissions/src/store/permissions/permissions.state.ts","../../../../packages/masterteam/permissions/src/store/permissions/permissions.facade.ts","../../../../packages/masterteam/permissions/src/lib/permissions-page/permissions-edit-dialog/permissions-edit-dialog.ts","../../../../packages/masterteam/permissions/src/lib/permissions-page/permissions-edit-dialog/permissions-edit-dialog.html","../../../../packages/masterteam/permissions/src/lib/permissions-page/permissions-page.ts","../../../../packages/masterteam/permissions/src/lib/permissions-page/permissions-page.html","../../../../packages/masterteam/permissions/src/store/index.ts","../../../../packages/masterteam/permissions/src/masterteam-permissions.ts"],"sourcesContent":["import { LoadingStateShape } from '../utils/state-helpers';\r\n\r\nexport interface Role {\r\n name: string;\r\n value: string;\r\n}\r\nexport interface LevelRoles {\r\n level?: string;\r\n levelKey?: string;\r\n scopeType?: string;\r\n scopeId?: string;\r\n roles?: Role[];\r\n}\r\n\r\nexport interface PermissionAction {\r\n id: number;\r\n name: string;\r\n isSelected: boolean;\r\n}\r\n\r\nexport interface PermissionLog {\r\n name: string;\r\n actions: PermissionAction[];\r\n}\r\n\r\nexport interface LevelPermission {\r\n levelName: string;\r\n modules: PermissionLog[];\r\n}\r\n\r\nexport interface RolesResponse {\r\n endpoint: string;\r\n status: number;\r\n code: number;\r\n locale: string;\r\n message: string;\r\n errors: null | string[];\r\n data: LevelRoles[];\r\n cacheSession: string;\r\n}\r\n\r\nexport interface PermissionsResponseData {\r\n modules: PermissionLog[];\r\n}\r\n\r\nexport interface PermissionsResponse {\r\n endpoint: string;\r\n status: number;\r\n code: number;\r\n locale: string;\r\n message: string;\r\n errors: null | string[];\r\n data: PermissionsResponseData;\r\n cacheSession: string;\r\n}\r\n\r\nexport interface GroupPermissionsResponse {\r\n endpoint: string;\r\n status: number;\r\n code: number;\r\n locale: string;\r\n message: string;\r\n errors: null | string[];\r\n data: LevelPermission[];\r\n cacheSession: string;\r\n}\r\n\r\nexport interface UpdatePermissionPayload {\r\n roleValue: string;\r\n levelId: string;\r\n permissions: LevelPermission[];\r\n}\r\n\r\nexport enum PermissionsActionKey {\r\n LoadRoles = 'loadRoles',\r\n SelectRole = 'selectRole',\r\n SelectGroup = 'selectGroup',\r\n LoadPermissions = 'loadPermissions',\r\n LoadGroupPermissions = 'loadGroupPermissions',\r\n UpdatePermission = 'updatePermission',\r\n UpdateGroupPermission = 'updateGroupPermission',\r\n ToggleAllLevelPermissions = 'toggleAllLevelPermissions',\r\n ToggleAllGroupPermissions = 'toggleAllGroupPermissions',\r\n}\r\n\r\nexport interface PermissionsStateModel extends LoadingStateShape<PermissionsActionKey> {\r\n roles: LevelRoles[];\r\n selectedRoleValue: string | null;\r\n selectedGroupValue: string | number | null;\r\n permissions: PermissionLog[];\r\n groupPermissions: LevelPermission[];\r\n currentLevelId: string | null;\r\n moduleType: string;\r\n moduleId: string | number;\r\n parentModuleType?: string | null;\r\n parentModuleId?: string | number | null;\r\n parentPath?: string;\r\n}\r\n\r\nexport enum ModuleType {\r\n MODULE = 'module',\r\n LEVEL = 'level',\r\n LOG = 'log',\r\n LEVELLOG = 'levelLog',\r\n}\r\n","export class LoadRoles {\r\n static readonly type = '[Permissions] Load Roles';\r\n constructor() {}\r\n}\r\n\r\nexport class SelectRole {\r\n static readonly type = '[Permissions] Select Role';\r\n constructor(public roleValue: string) {}\r\n}\r\n\r\nexport class SelectGroup {\r\n static readonly type = '[Permissions] Select Group';\r\n constructor(public groupId: number) {}\r\n}\r\n\r\nexport class LoadPermissions {\r\n static readonly type = '[Permissions] Load Permissions';\r\n constructor(\r\n public roleValue: string,\r\n public levelId: string,\r\n ) {}\r\n}\r\n\r\nexport class LoadGroupPermissions {\r\n static readonly type = '[Permissions] Load Group Permissions';\r\n constructor(\r\n public groupId: number,\r\n public levelId: string,\r\n ) {}\r\n}\r\n\r\nexport class UpdatePermissionLocally {\r\n static readonly type = '[Permissions] Update Permission Locally';\r\n constructor(\r\n public roleValue: string,\r\n public levelId: string,\r\n public actionId: number,\r\n public isSelected: boolean,\r\n ) {}\r\n}\r\n\r\nexport class UpdatePermission {\r\n static readonly type = '[Permissions] Update Permission';\r\n constructor(\r\n public roleValue: string,\r\n public levelId: string,\r\n ) {}\r\n}\r\n\r\nexport class UpdateGroupPermission {\r\n static readonly type = '[Permissions] Update Group Permission';\r\n constructor(\r\n public groupId: string,\r\n public levelId: string,\r\n ) {}\r\n}\r\n\r\nexport class ToggleAllLevelPermissions {\r\n static readonly type = '[Permissions] Toggle All Level Permissions';\r\n constructor(\r\n public roleValue: string,\r\n public levelId: string,\r\n public levelName: string,\r\n public enabled: boolean,\r\n ) {}\r\n}\r\n\r\nexport class ToggleAllGroupPermissions {\r\n static readonly type = '[Permissions] Toggle All Group Permissions';\r\n constructor(\r\n public levelId: string,\r\n public groupId: string,\r\n public enabled: boolean,\r\n ) {}\r\n}\r\n\r\nexport class SetModuleInfo {\r\n static readonly type = '[Permissions] Set Module Info';\r\n\r\n constructor(\r\n public readonly moduleType: string,\r\n public readonly moduleId: string | number,\r\n public readonly parentModuleType?: string,\r\n public readonly parentModuleId?: string | number,\r\n public readonly parentPath?: string,\r\n ) {}\r\n}\r\n\r\nexport class Reset {\r\n static readonly type = '[Permissions] Reset Module Info';\r\n\r\n constructor() {}\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport { map } from 'rxjs';\r\nimport { CrudStateBase, handleApiRequest } from '@masterteam/components';\r\nimport {\r\n GroupPermissionsResponse,\r\n LevelPermission,\r\n LevelRoles,\r\n ModuleType,\r\n PermissionLog,\r\n PermissionsResponse,\r\n PermissionsActionKey,\r\n PermissionsStateModel,\r\n RolesResponse,\r\n} from './permissions.model';\r\nimport * as PermissionsActions from './permissions.actions';\r\n\r\n@State<PermissionsStateModel>({\r\n name: 'permissions',\r\n defaults: {\r\n roles: [],\r\n selectedRoleValue: null,\r\n selectedGroupValue: null,\r\n permissions: [],\r\n groupPermissions: [],\r\n currentLevelId: null,\r\n moduleType: '',\r\n moduleId: '',\r\n parentModuleType: null,\r\n parentModuleId: null,\r\n parentPath: '',\r\n loadingActive: [], // Required by LoadingStateShape\r\n errors: {}, // Required by LoadingStateShape\r\n },\r\n})\r\n@Injectable()\r\nexport class PermissionsState extends CrudStateBase<\r\n LevelRoles,\r\n PermissionsStateModel,\r\n PermissionsActionKey\r\n> {\r\n private http = inject(HttpClient);\r\n\r\n // ============================================================================\r\n // Data Selectors - Individual for fine-grained reactivity\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getRoles(state: PermissionsStateModel): LevelRoles[] {\r\n return state.roles;\r\n }\r\n\r\n @Selector()\r\n static getSelectedRoleValue(state: PermissionsStateModel): string | null {\r\n return state.selectedRoleValue;\r\n }\r\n\r\n @Selector()\r\n static getSelectedGroupValue(\r\n state: PermissionsStateModel,\r\n ): string | number | null {\r\n return state.selectedGroupValue;\r\n }\r\n\r\n @Selector()\r\n static getPermissions(state: PermissionsStateModel): PermissionLog[] {\r\n return state.permissions;\r\n }\r\n\r\n @Selector()\r\n static getGroupPermissions(state: PermissionsStateModel): LevelPermission[] {\r\n return state.groupPermissions;\r\n }\r\n\r\n @Selector()\r\n static getModuleType(state: PermissionsStateModel): string {\r\n return state.moduleType;\r\n }\r\n\r\n @Selector()\r\n static getModuleId(state: PermissionsStateModel): string | number {\r\n return state.moduleId;\r\n }\r\n\r\n @Selector()\r\n static getLevelId(state: PermissionsStateModel): string {\r\n const scopeId = resolveActiveScopeId(state);\r\n return scopeId != null ? scopeId.toString() : '';\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: PermissionsStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(\r\n state: PermissionsStateModel,\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\r\n // ============================================================================\r\n // CRUD Actions\r\n // ============================================================================\r\n\r\n @Action(PermissionsActions.LoadRoles)\r\n loadRoles(ctx: StateContext<PermissionsStateModel>) {\r\n const { moduleType, moduleId, parentPath } = ctx.getState();\r\n const state = ctx.getState();\r\n const req$ = this.http\r\n .get<RolesResponse>(\r\n `identity/roles${parentPath ? '' : '/scopes'}${parentPath}/${moduleType}/${moduleId}${parentPath ? '' : '?inherited=true'}`,\r\n )\r\n .pipe(map((response) => response.data));\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.LoadRoles,\r\n request$: req$,\r\n onSuccess: (roles: any) => ({\r\n roles: state.moduleType === 'module' ? [{ roles: roles }] : roles,\r\n currentLevelId: resolveActiveScopeId(state)?.toString() ?? null,\r\n }),\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Simple State Updates (No HTTP)\r\n // ============================================================================\r\n\r\n @Action(PermissionsActions.SelectRole)\r\n selectRole(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.SelectRole,\r\n ) {\r\n const state = ctx.getState();\r\n ctx.patchState({ selectedRoleValue: action.roleValue });\r\n\r\n if (state.currentLevelId && action.roleValue) {\r\n ctx.dispatch(\r\n new PermissionsActions.LoadPermissions(\r\n action.roleValue,\r\n state.currentLevelId,\r\n ),\r\n );\r\n }\r\n }\r\n\r\n @Action(PermissionsActions.SelectGroup)\r\n selectGroup(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.SelectGroup,\r\n ) {\r\n const state = ctx.getState();\r\n ctx.patchState({ selectedGroupValue: action.groupId });\r\n\r\n if (state.currentLevelId) {\r\n ctx.dispatch(\r\n new PermissionsActions.LoadGroupPermissions(\r\n action.groupId,\r\n state.currentLevelId,\r\n ),\r\n );\r\n }\r\n }\r\n\r\n @Action(PermissionsActions.LoadPermissions)\r\n loadPermissions(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.LoadPermissions,\r\n ) {\r\n const state = ctx.getState();\r\n const scopePath = resolvePermissionScopePath(state);\r\n\r\n const req$ = this.http\r\n .get<PermissionsResponse>(\r\n `identity/roles/${scopePath}/${action.roleValue}/permissions`,\r\n )\r\n .pipe(map((response) => response.data.modules));\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.LoadPermissions,\r\n request$: req$,\r\n onSuccess: (permissions) => ({\r\n permissions,\r\n }),\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.LoadGroupPermissions)\r\n loadGroupPermissions(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.LoadGroupPermissions,\r\n ) {\r\n const state = ctx.getState();\r\n const scopePath = resolvePermissionScopePath(state);\r\n\r\n const req$ = this.http\r\n .get<GroupPermissionsResponse>(\r\n `identity/groups/${scopePath}/${action.groupId}/permissions`,\r\n )\r\n .pipe(map((response: any) => response.data.modules));\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.LoadPermissions,\r\n request$: req$,\r\n onSuccess: (permissions) => ({\r\n permissions,\r\n }),\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.UpdatePermissionLocally)\r\n updatePermissionLocally(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.UpdatePermissionLocally,\r\n ) {\r\n const state = ctx.getState();\r\n\r\n const updatedPermissions = state.permissions.map((log) => ({\r\n ...log,\r\n actions: log.actions.map((act) =>\r\n act.id === action.actionId\r\n ? { ...act, isSelected: action.isSelected }\r\n : act,\r\n ),\r\n }));\r\n\r\n ctx.patchState({ permissions: updatedPermissions });\r\n }\r\n\r\n // ============================================================================\r\n // Complex Operations - use handleApiRequest for transformations\r\n // ============================================================================\r\n\r\n @Action(PermissionsActions.UpdatePermission)\r\n updatePermission(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.UpdatePermission,\r\n ) {\r\n const state = ctx.getState();\r\n const updatedPermissions: any[] = [];\r\n state.permissions?.forEach((p) => {\r\n p?.actions.forEach((a: any) => {\r\n updatedPermissions.push({ id: a?.id, isSelected: a?.isSelected });\r\n });\r\n });\r\n const { scopeId, scopeType } = resolvePermissionMutationScope(state);\r\n\r\n const req$ = this.http.put<PermissionsResponse>(\r\n `identity/roles/${action.roleValue}/setAllPermissions`,\r\n { permissions: updatedPermissions },\r\n {\r\n params: {\r\n scopeId,\r\n scopeType,\r\n },\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.UpdatePermission,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n onError: (error, currentState) => {\r\n // Rollback on error\r\n return { permissions: currentState.permissions };\r\n },\r\n errorMessage: 'Failed to update permission',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.UpdateGroupPermission)\r\n updateGroupPermission(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.UpdateGroupPermission,\r\n ) {\r\n const state = ctx.getState();\r\n const updatedPermissions: any[] = [];\r\n state.permissions?.forEach((p) => {\r\n p?.actions.forEach((a: any) => {\r\n updatedPermissions.push({ id: a?.id, isSelected: a?.isSelected });\r\n });\r\n });\r\n\r\n const req$ = this.http.put<PermissionsResponse>(\r\n `identity/groups/${action.groupId}/setAllPermissions`,\r\n { permissions: updatedPermissions },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.UpdateGroupPermission,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n onError: (error, currentState) => {\r\n // Rollback on error\r\n return { permissions: currentState.permissions };\r\n },\r\n errorMessage: 'Failed to update permission',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.ToggleAllLevelPermissions)\r\n toggleAllLevelPermissions(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.ToggleAllLevelPermissions,\r\n ) {\r\n const state = ctx.getState();\r\n\r\n const updatedPermissions: any[] = [];\r\n state.permissions?.forEach((p) => {\r\n p?.actions.forEach((a: any) => {\r\n updatedPermissions.push({ id: a?.id, isSelected: action.enabled });\r\n });\r\n });\r\n\r\n const { scopeId, scopeType } = resolvePermissionMutationScope(state);\r\n\r\n const req$ = this.http.put<PermissionsResponse>(\r\n `identity/roles/${action.roleValue}/setAllPermissions`,\r\n { permissions: updatedPermissions },\r\n {\r\n params: {\r\n scopeId,\r\n scopeType,\r\n },\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.ToggleAllLevelPermissions,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n onError: () => ({\r\n permissions: state.permissions,\r\n }),\r\n errorMessage: 'Failed to toggle all permissions',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.ToggleAllGroupPermissions)\r\n toggleAllGroupPermissions(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.ToggleAllGroupPermissions,\r\n ) {\r\n const state = ctx.getState();\r\n\r\n const updatedPermissions: any[] = [];\r\n state.permissions?.forEach((p) => {\r\n p?.actions.forEach((a: any) => {\r\n updatedPermissions.push({ id: a?.id, isSelected: action.enabled });\r\n });\r\n });\r\n\r\n const req$ = this.http.put<PermissionsResponse>(\r\n `identity/groups/${action.groupId}/setAllPermissions`,\r\n { permissions: updatedPermissions },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.ToggleAllGroupPermissions,\r\n request$: req$,\r\n onSuccess: () => ({\r\n permissions: state.permissions.map((permissionGroup) => ({\r\n ...permissionGroup,\r\n actions: permissionGroup.actions.map((permission) => ({\r\n ...permission,\r\n isSelected: action.enabled,\r\n })),\r\n })),\r\n }),\r\n onError: () => ({\r\n permissions: state.permissions,\r\n }),\r\n errorMessage: 'Failed to toggle all permissions',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.SetModuleInfo)\r\n setModuleInfo(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.SetModuleInfo,\r\n ) {\r\n let parentPath = '';\r\n if (action.parentModuleType && action.parentModuleId) {\r\n parentPath = `/${action.parentModuleType}/${action.parentModuleId}`;\r\n } else if (action.parentPath) {\r\n parentPath = action.parentPath;\r\n }\r\n ctx.patchState({\r\n moduleType: action.moduleType,\r\n moduleId: action.moduleId,\r\n parentModuleType: action.parentModuleType ?? null,\r\n parentModuleId: action.parentModuleId ?? null,\r\n parentPath: parentPath ?? '',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.Reset)\r\n reset(ctx: StateContext<PermissionsStateModel>) {\r\n ctx.patchState({\r\n moduleType: '',\r\n moduleId: '',\r\n parentModuleType: null,\r\n parentModuleId: null,\r\n parentPath: '',\r\n roles: [],\r\n selectedRoleValue: null,\r\n selectedGroupValue: null,\r\n permissions: [],\r\n groupPermissions: [],\r\n });\r\n }\r\n}\r\n\r\nfunction hasParentScope(state: PermissionsStateModel): boolean {\r\n return (\r\n state.parentModuleId !== null &&\r\n state.parentModuleId !== undefined &&\r\n state.parentModuleId !== ''\r\n );\r\n}\r\n\r\nfunction resolveActiveScopeId(\r\n state: PermissionsStateModel,\r\n): string | number | null {\r\n if (state.moduleType === 'module') {\r\n return hasParentScope(state) ? state.parentModuleId! : state.moduleId;\r\n }\r\n\r\n return state.moduleId;\r\n}\r\n\r\nfunction resolvePermissionMutationScope(state: PermissionsStateModel): {\r\n scopeId: string | number;\r\n scopeType: ModuleType;\r\n} {\r\n if (state.moduleType === 'module' && !hasParentScope(state)) {\r\n return {\r\n scopeId: state.moduleId,\r\n scopeType: ModuleType.MODULE,\r\n };\r\n }\r\n\r\n return {\r\n scopeId: resolveActiveScopeId(state) ?? '',\r\n scopeType: ModuleType.LEVEL,\r\n };\r\n}\r\n\r\nfunction resolvePermissionScopePath(state: PermissionsStateModel): string {\r\n return `${state.parentPath ?? ''}/${state.moduleType}/${state.moduleId}`\r\n .replace(/\\/+/g, '/')\r\n .replace(/^\\//, '');\r\n}\r\n","import { inject, Injectable, computed } from '@angular/core';\r\nimport { Store, select } from '@ngxs/store';\r\nimport { PermissionsState } from './permissions.state';\r\nimport * as PermissionsActions from './permissions.actions';\r\nimport { Observable } from 'rxjs';\r\nimport { PermissionsActionKey } from './permissions.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PermissionsFacade {\r\n private store = inject(Store);\r\n\r\n // ============================================================================\r\n // Data Selectors - Memoized by NGXS (fine-grained reactivity)\r\n // ============================================================================\r\n readonly roles = select(PermissionsState.getRoles);\r\n readonly selectedRoleValue = select(PermissionsState.getSelectedRoleValue);\r\n readonly selectedGroupValue = select(PermissionsState.getSelectedGroupValue);\r\n readonly permissions = select(PermissionsState.getPermissions);\r\n readonly groupPermissions = select(PermissionsState.getGroupPermissions);\r\n readonly moduleType = select(PermissionsState.getModuleType);\r\n readonly moduleId = select(PermissionsState.getModuleId);\r\n readonly levelId = select(PermissionsState.getLevelId);\r\n\r\n // ============================================================================\r\n // Loading/Error Slices - Memoized by NGXS\r\n // ============================================================================\r\n private readonly loadingActive = select(PermissionsState.getLoadingActive);\r\n private readonly errors = select(PermissionsState.getErrors);\r\n\r\n // ============================================================================\r\n // Loading Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly isLoadingRoles = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.LoadRoles),\r\n );\r\n readonly isLoadingPermissions = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.LoadPermissions),\r\n );\r\n readonly isLoadingGroupPermissions = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.LoadGroupPermissions),\r\n );\r\n readonly isUpdatingPermission = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.UpdatePermission),\r\n );\r\n readonly isUpdatingGroupPermission = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.UpdateGroupPermission),\r\n );\r\n readonly isTogglingLevelPermissions = computed(() =>\r\n this.loadingActive().includes(\r\n PermissionsActionKey.ToggleAllLevelPermissions,\r\n ),\r\n );\r\n readonly isTogglingGroupPermissions = computed(() =>\r\n this.loadingActive().includes(\r\n PermissionsActionKey.ToggleAllGroupPermissions,\r\n ),\r\n );\r\n\r\n // ============================================================================\r\n // Error Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly rolesError = computed(\r\n () => this.errors()[PermissionsActionKey.LoadRoles] ?? null,\r\n );\r\n readonly permissionsError = computed(\r\n () => this.errors()[PermissionsActionKey.LoadPermissions] ?? null,\r\n );\r\n readonly groupPermissionsError = computed(\r\n () => this.errors()[PermissionsActionKey.LoadGroupPermissions] ?? null,\r\n );\r\n readonly updatePermissionError = computed(\r\n () => this.errors()[PermissionsActionKey.UpdatePermission] ?? null,\r\n );\r\n readonly updateGroupPermissionError = computed(\r\n () => this.errors()[PermissionsActionKey.UpdateGroupPermission] ?? null,\r\n );\r\n\r\n // ============================================================================\r\n // Action Dispatchers\r\n // ============================================================================\r\n\r\n loadRoles() {\r\n return this.store.dispatch(new PermissionsActions.LoadRoles());\r\n }\r\n\r\n selectRole(roleValue: string) {\r\n return this.store.dispatch(new PermissionsActions.SelectRole(roleValue));\r\n }\r\n\r\n selectGroup(groupId: number) {\r\n if (groupId) {\r\n return this.store.dispatch(new PermissionsActions.SelectGroup(groupId));\r\n }\r\n return;\r\n }\r\n\r\n loadPermissions(roleValue: string, levelId: string) {\r\n return this.store.dispatch(\r\n new PermissionsActions.LoadPermissions(roleValue, levelId),\r\n );\r\n }\r\n\r\n loadGroupPermissions(groupId: number, levelId: string) {\r\n return this.store.dispatch(\r\n new PermissionsActions.LoadGroupPermissions(groupId, levelId),\r\n );\r\n }\r\n\r\n updatePermissionLocally(\r\n roleValue: string,\r\n levelId: string,\r\n actionId: number,\r\n isSelected: boolean,\r\n ) {\r\n return this.store.dispatch(\r\n new PermissionsActions.UpdatePermissionLocally(\r\n roleValue,\r\n levelId,\r\n actionId,\r\n isSelected,\r\n ),\r\n );\r\n }\r\n\r\n updatePermission(roleValue: string, levelId: string) {\r\n return this.store.dispatch(\r\n new PermissionsActions.UpdatePermission(roleValue, levelId),\r\n );\r\n }\r\n updateGroupPermission(groupId: string, levelId: string) {\r\n return this.store.dispatch(\r\n new PermissionsActions.UpdateGroupPermission(groupId, levelId),\r\n );\r\n }\r\n\r\n toggleAllLevelPermissions(\r\n roleValue: string,\r\n levelId: string,\r\n levelName: string,\r\n enabled: boolean,\r\n ) {\r\n return this.store.dispatch(\r\n new PermissionsActions.ToggleAllLevelPermissions(\r\n roleValue,\r\n levelId,\r\n levelName,\r\n enabled,\r\n ),\r\n );\r\n }\r\n toggleAllGroupPermissions(\r\n levelId: string,\r\n groupId: string,\r\n enabled: boolean,\r\n ) {\r\n return this.store.dispatch(\r\n new PermissionsActions.ToggleAllGroupPermissions(\r\n levelId,\r\n groupId,\r\n enabled,\r\n ),\r\n );\r\n }\r\n setModuleInfo(\r\n moduleType: string,\r\n moduleId: string | number,\r\n parentModuleType?: string,\r\n parentModuleId?: string | number,\r\n parentPath?: string,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(\r\n new PermissionsActions.SetModuleInfo(\r\n moduleType,\r\n moduleId,\r\n parentModuleType,\r\n parentModuleId,\r\n parentPath,\r\n ),\r\n );\r\n }\r\n\r\n reset() {\r\n return this.store.dispatch(new PermissionsActions.Reset());\r\n }\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { PermissionsFacade } from '../../../store/permissions/permissions.facade';\r\nimport {\r\n PermissionLog,\r\n PermissionAction,\r\n} from '../../../store/permissions/permissions.model';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { Button } from '@masterteam/components/button';\r\n\r\n@Component({\r\n selector: 'mt-permissions-edit-dialog',\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n ToggleField,\r\n TranslocoModule,\r\n FormsModule,\r\n Button,\r\n ],\r\n templateUrl: './permissions-edit-dialog.html',\r\n styleUrl: './permissions-edit-dialog.scss',\r\n})\r\nexport class PermissionsEditDialog {\r\n private permissionsFacade = inject(PermissionsFacade);\r\n modal = inject(ModalService, { optional: true });\r\n ref = inject(ModalRef, { optional: true });\r\n permissionGroup = input<PermissionLog | null>(null);\r\n inline = input(false);\r\n\r\n // Use new facade pattern\r\n addPermissionsLoading = this.permissionsFacade.isUpdatingPermission;\r\n addPermissionsError = this.permissionsFacade.updatePermissionError;\r\n\r\n levelId = input.required<string>();\r\n roleValue = input.required<string>();\r\n isGroup = input.required<boolean>();\r\n\r\n closeDialog = output<void>();\r\n\r\n actionControls = signal<Map<number, FormControl>>(new Map());\r\n toggleAll = signal<boolean>(false);\r\n contentClass = computed(() =>\r\n this.inline()\r\n ? 'flex flex-col gap-3'\r\n : `flex flex-col gap-3 p-4 ${this.modal?.contentClass ?? ''}`,\r\n );\r\n footerClass = computed(() =>\r\n this.inline() ? 'mt-4 flex justify-end' : (this.modal?.footerClass ?? ''),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const group = this.permissionGroup();\r\n if (group) {\r\n const controls = new Map<number, FormControl>();\r\n group.actions.forEach((action) => {\r\n const control = new FormControl(action.isSelected);\r\n control.valueChanges.subscribe((value) => {\r\n if (value !== null) {\r\n this.onPermissionToggle(action.id, value);\r\n }\r\n });\r\n controls.set(action.id, control);\r\n });\r\n this.actionControls.set(controls);\r\n this.toggleAll.set(group.actions.every((action) => action.isSelected));\r\n }\r\n });\r\n }\r\n\r\n onPermissionToggle(actionId: number, isSelected: boolean) {\r\n const levelId = this.levelId();\r\n const roleValue = this.roleValue();\r\n if (levelId && roleValue) {\r\n this.permissionsFacade.updatePermissionLocally(\r\n roleValue,\r\n levelId,\r\n actionId,\r\n isSelected,\r\n );\r\n }\r\n }\r\n\r\n onClose() {\r\n this.ref?.close();\r\n }\r\n\r\n trackByActionId(_index: number, action: PermissionAction) {\r\n return action.id;\r\n }\r\n\r\n getControl(actionId: number): FormControl {\r\n return this.actionControls().get(actionId) || new FormControl(false);\r\n }\r\n\r\n onSave(): void {\r\n const levelId = this.levelId();\r\n const roleValue = this.roleValue();\r\n const isGroup = this.isGroup();\r\n if (levelId && roleValue) {\r\n let subscription;\r\n if (isGroup) {\r\n subscription = this.permissionsFacade.updateGroupPermission(\r\n roleValue,\r\n levelId,\r\n );\r\n } else {\r\n subscription = this.permissionsFacade.updatePermission(\r\n roleValue,\r\n levelId,\r\n );\r\n }\r\n subscription.subscribe({\r\n next: () => {\r\n if (!this.inline()) {\r\n this.onClose();\r\n }\r\n },\r\n error: (error: any) => {\r\n console.error('Failed to save accessibility permissions:', error);\r\n },\r\n });\r\n }\r\n }\r\n\r\n selectAll() {\r\n const group = this.permissionGroup();\r\n const actions = group?.actions || [];\r\n for (let i = 0; i < actions?.length; i++) {\r\n const control = this.actionControls().get(actions[i].id);\r\n control?.setValue(this.toggleAll());\r\n }\r\n }\r\n}\r\n","<div [class]=\"contentClass()\">\r\n @if (permissionGroup(); as group) {\r\n <div\r\n class=\"mb-4 flex flex-row gap-3 rounded-lg border border-surface p-3 sm:flex-row sm:items-center sm:justify-between\"\r\n >\r\n <span class=\"text-sm font-medium\">{{\r\n \"permissions.selectAll\" | transloco\r\n }}</span>\r\n <mt-toggle-field\r\n class=\"self-end shrink-0 sm:self-center\"\r\n [(ngModel)]=\"toggleAll\"\r\n (onChange)=\"selectAll()\"\r\n ></mt-toggle-field>\r\n </div>\r\n @for (action of group.actions; track trackByActionId($index, action)) {\r\n <div\r\n class=\"flex flex-row gap-3 rounded-lg border border-surface p-3 sm:flex-row sm:items-center sm:justify-between\"\r\n >\r\n <span class=\"min-w-0 break-words text-sm font-medium\">{{\r\n action.name?.display\r\n }}</span>\r\n <mt-toggle-field\r\n class=\"self-end shrink-0 sm:self-center\"\r\n [formControl]=\"getControl(action.id)\"\r\n ></mt-toggle-field>\r\n </div>\r\n }\r\n }\r\n</div>\r\n<div [class]=\"footerClass()\">\r\n <mt-button\r\n class=\"w-full sm:w-auto\"\r\n [label]=\"'save' | transloco\"\r\n (click)=\"onSave()\"\r\n [loading]=\"addPermissionsLoading()\"\r\n />\r\n</div>\r\n","import {\r\n Component,\r\n computed,\r\n DestroyRef,\r\n effect,\r\n inject,\r\n linkedSignal,\r\n OnDestroy,\r\n OnInit,\r\n signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { PermissionsFacade } from '../../store/permissions/permissions.facade';\r\nimport { PermissionLog } from '../../store/permissions/permissions.model';\r\nimport { PermissionsEditDialog } from './permissions-edit-dialog/permissions-edit-dialog';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { AccessibilitiesFacade } from '@masterteam/accessibilities';\r\n\r\n@Component({\r\n selector: 'mt-permissions-page',\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n Card,\r\n Button,\r\n ToggleField,\r\n TranslocoModule,\r\n Avatar,\r\n SkeletonModule,\r\n Tabs,\r\n PermissionsEditDialog,\r\n ],\r\n templateUrl: './permissions-page.html',\r\n styleUrl: './permissions-page.scss',\r\n})\r\nexport default class PermissionsPage implements OnInit, OnDestroy {\r\n private readonly permissionsFacade = inject(PermissionsFacade);\r\n private readonly accessibilitiesFacade: any = inject(AccessibilitiesFacade);\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly router = inject(Router);\r\n private readonly translocoService = inject(TranslocoService);\r\n private readonly modal = inject(ModalService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n private readonly defaultLevelName = 'Project';\r\n\r\n // Use new facade pattern\r\n levelRoles = this.permissionsFacade.roles;\r\n selectedRoleValue = this.permissionsFacade.selectedRoleValue;\r\n selectedRole = computed(() => this.selectedRoleValue() ?? '');\r\n selectedGroupValue = this.permissionsFacade.selectedGroupValue;\r\n selectedGroup = computed(() => this.selectedGroupValue());\r\n permissions = this.permissionsFacade.permissions;\r\n loading = this.permissionsFacade.isLoadingRoles;\r\n permissionsLoading = this.permissionsFacade.isLoadingPermissions;\r\n levelId = this.permissionsFacade.levelId;\r\n groups = this.accessibilitiesFacade.groups;\r\n\r\n allPermissionsToggle = new FormControl<boolean>(false);\r\n\r\n readonly groupOrRoleId = computed(() => {\r\n const idParam = this.route.snapshot.firstChild?.paramMap.get('id');\r\n return idParam ? idParam : '';\r\n });\r\n\r\n readonly selectedTabFromParams = computed(() => {\r\n const idParam = this.route.snapshot.firstChild?.data['selectedTab'];\r\n return idParam ? idParam : 'roles';\r\n });\r\n readonly permissionTargetValue = computed(() =>\r\n this.selectedTab() === 'roles'\r\n ? (this.selectedRoleValue() ?? '')\r\n : (this.selectedGroup()?.toString() ?? ''),\r\n );\r\n readonly singlePermissionGroup = computed<PermissionLog | null>(() => {\r\n const permissionGroups = this.permissions();\r\n return permissionGroups.length === 1 ? permissionGroups[0] : null;\r\n });\r\n\r\n selectedTab = linkedSignal<string>(this.selectedTabFromParams);\r\n tabsList = signal<any[]>([\r\n {\r\n label: this.translocoService.translate('permissions.roles'),\r\n value: 'roles',\r\n },\r\n {\r\n label: this.translocoService.translate('permissions.groups'),\r\n value: 'groups',\r\n },\r\n ]);\r\n firstLoad = signal(true);\r\n\r\n constructor() {\r\n effect(() => {\r\n const allEnabled = this.isAllPermissionsEnabled();\r\n this.allPermissionsToggle.setValue(allEnabled, { emitEvent: false });\r\n });\r\n effect(() => {\r\n if (this.selectedTab() == 'roles') {\r\n if (this.levelRoles().length == 0) {\r\n if (this.firstLoad() && !this.loading()) {\r\n this.permissionsFacade.loadRoles();\r\n this.firstLoad.set(false);\r\n }\r\n return;\r\n }\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (this.selectedTab() !== 'roles' || this.loading()) {\r\n return;\r\n }\r\n\r\n const roles = this.getRoles();\r\n if (!roles.length) {\r\n return;\r\n }\r\n\r\n const routeRoleValue = this.groupOrRoleId()?.toString();\r\n const selectedRoleValue = this.selectedRoleValue();\r\n const routeRole = routeRoleValue\r\n ? roles.find((role) => role?.value === routeRoleValue)\r\n : null;\r\n\r\n if (routeRole) {\r\n if (selectedRoleValue !== routeRole.value) {\r\n this.permissionsFacade.selectRole(routeRole.value);\r\n }\r\n return;\r\n }\r\n\r\n if (\r\n selectedRoleValue &&\r\n roles.some((role) => role?.value === selectedRoleValue)\r\n ) {\r\n return;\r\n }\r\n\r\n this.selectFirstRole(true);\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.permissionsFacade.selectRole('');\r\n this.permissionsFacade.loadRoles();\r\n this.accessibilitiesFacade.getGroups();\r\n\r\n this.allPermissionsToggle.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((value) => {\r\n if (value !== null) {\r\n this.onToggleAllLevel(this.defaultLevelName, value);\r\n }\r\n });\r\n }\r\n\r\n selectRole(roleValue: string): void {\r\n this.router.navigate(['roles', roleValue], { relativeTo: this.route });\r\n this.permissionsFacade.selectRole(roleValue);\r\n }\r\n\r\n private getRoles() {\r\n return this.levelRoles()\r\n .map((levelRoles) => levelRoles.roles ?? [])\r\n .flat();\r\n }\r\n\r\n private selectFirstRole(replaceUrl = false): void {\r\n const firstRoleValue = this.getRoles()[0]?.value;\r\n\r\n if (!firstRoleValue) {\r\n return;\r\n }\r\n\r\n this.router.navigate(['roles', firstRoleValue], {\r\n relativeTo: this.route,\r\n replaceUrl,\r\n });\r\n this.permissionsFacade.selectRole(firstRoleValue);\r\n }\r\n\r\n selectGroup(groupId: number): void {\r\n this.router.navigate(['groups', groupId], { relativeTo: this.route });\r\n this.permissionsFacade.selectGroup(groupId);\r\n }\r\n\r\n openPermissionDialog(group: PermissionLog): void {\r\n if (this.levelId() && (this.selectedRoleValue() || this.selectedGroup())) {\r\n this.modal.openModal(PermissionsEditDialog, 'drawer', {\r\n header: this.translocoService.translate('permissions.setPermissions'),\r\n position: 'end',\r\n styleClass:\r\n '!absolute !shadow-none !w-full !max-w-full sm:!w-[30rem] xl:!w-[24%]',\r\n appendTo: 'page-content',\r\n inputValues: {\r\n permissionGroup: group,\r\n levelId: this.levelId(),\r\n roleValue:\r\n this.selectedTab() == 'roles'\r\n ? this.selectedRoleValue()\r\n : this.selectedGroup(),\r\n isGroup: this.selectedTab() != 'roles',\r\n },\r\n dismissible: true,\r\n });\r\n }\r\n }\r\n\r\n onToggleAllLevel(levelName: string, enabled: boolean): void {\r\n const levelId = this.levelId();\r\n const roleValue = this.selectedRoleValue();\r\n\r\n if (levelId) {\r\n if (this.selectedTab() != 'roles') {\r\n this.permissionsFacade.toggleAllGroupPermissions(\r\n levelId,\r\n this.selectedGroup()!.toString(),\r\n enabled,\r\n );\r\n return;\r\n } else {\r\n if (!!roleValue) {\r\n this.permissionsFacade.toggleAllLevelPermissions(\r\n roleValue,\r\n levelId,\r\n levelName,\r\n enabled,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n isAllPermissionsEnabled(): boolean {\r\n if (this.permissions().length === 0) return false;\r\n\r\n return this.permissions().every((log) =>\r\n log?.actions.every((action) => action?.isSelected),\r\n );\r\n }\r\n\r\n trackByRoleValue(_index: number, role: any) {\r\n return role.value;\r\n }\r\n\r\n onTabChange($event: any) {\r\n if ($event == 'roles') {\r\n if (this.levelRoles().length) {\r\n this.selectFirstRole();\r\n } else {\r\n this.router.navigate(['roles'], { relativeTo: this.route });\r\n }\r\n } else if ($event == 'groups') {\r\n // Navigate to first group if available\r\n const firstGroup = this.groups()[0];\r\n\r\n if (firstGroup?.id) {\r\n this.router.navigate(['groups', firstGroup.id], {\r\n relativeTo: this.route,\r\n });\r\n this.permissionsFacade.selectGroup(firstGroup.id);\r\n } else {\r\n this.router.navigate(['groups'], { relativeTo: this.route });\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.permissionsFacade.reset();\r\n }\r\n}\r\n","<div\r\n id=\"permissions-page-card\"\r\n class=\"grid h-full min-h-0 w-full grid-cols-[minmax(18rem,22rem)_minmax(0,1fr)] gap-4 p-1 max-[1025px]:h-auto max-[1025px]:grid-cols-1 max-[1025px]:gap-3\"\r\n>\r\n <div class=\"min-h-0 min-w-0\">\r\n <mt-card class=\"h-full max-[1025px]:h-auto\">\r\n <ng-template #headless>\r\n <div class=\"flex h-full min-h-0 flex-col\">\r\n <div\r\n class=\"p-4 pb-0 bg-surface-50 rounded-t-2xl border-b border-surface\"\r\n >\r\n <h2 class=\"text-lg font-semibold mb-3\">\r\n {{ \"permissions.rolesAndGroups\" | transloco }}\r\n </h2>\r\n\r\n <div class=\"overflow-x-auto pb-4\">\r\n <mt-tabs\r\n class=\"min-w-max\"\r\n [(active)]=\"selectedTab\"\r\n [options]=\"tabsList()\"\r\n size=\"large\"\r\n (onChange)=\"onTabChange($event)\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex-1 overflow-y-auto p-4 max-[1025px]:max-h-[42vh]\">\r\n @if (loading()) {\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n } @else {\r\n @if (selectedTab() === \"roles\") {\r\n @for (level of levelRoles(); track level) {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n <h2 class=\"font-semibold\">{{ level?.level?.display }}</h2>\r\n @for (role of level.roles; track role.value) {\r\n <div\r\n class=\"flex items-start gap-3 rounded-lg border-2 border-dashed border-gray-300 p-3 transition-colors cursor-pointer\"\r\n [class.bg-primary-50]=\"selectedRole() === role.value\"\r\n [class.hover:bg-surface-100]=\"\r\n selectedRole() !== role.value\r\n \"\r\n [class.border-primary-400]=\"\r\n selectedRole() === role.value\r\n \"\r\n [style.--p-avatar-background]=\"\r\n selectedRole() === role.value\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedRole() === role.value ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectRole(role.value)\"\r\n >\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'user.user-check-01'\"\r\n shape=\"square\"\r\n >\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ role.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noRolesFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noLevelRolesFound\" | transloco }}\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n @for (group of groups(); track group.name) {\r\n <div\r\n class=\"flex items-start gap-3 rounded-lg border-2 border-dashed border-gray-300 p-3 transition-colors cursor-pointer\"\r\n [class.bg-primary-50]=\"selectedGroup() === group.id\"\r\n [class.hover:bg-surface-100]=\"\r\n selectedGroup() !== group.id\r\n \"\r\n [class.border-primary-400]=\"selectedGroup() === group.id\"\r\n [style.--p-avatar-background]=\"\r\n selectedGroup() === group.id\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedGroup() === group.id ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectGroup(group.id)\"\r\n >\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'user.users-check'\"\r\n shape=\"square\"\r\n >\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ group.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noGroupsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n </div>\r\n\r\n <div class=\"min-h-0 min-w-0\">\r\n @if (!selectedRole() && !selectedGroup()) {\r\n <mt-card class=\"h-full max-[1025px]:h-auto\">\r\n <ng-template #headless>\r\n <div\r\n class=\"flex h-full min-h-[16rem] items-center justify-center p-6 text-center text-muted-color\"\r\n >\r\n {{ \"permissions.selectRoleOrGroupToViewPermissions\" | transloco }}\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n } @else {\r\n <mt-card class=\"h-full max-[1025px]:h-auto\">\r\n <ng-template #headless>\r\n <div class=\"flex h-full min-h-0 flex-col\">\r\n <div class=\"mb-5 border-b border-surface p-4 pb-2\">\r\n <h2 class=\"mb-3 text-lg font-semibold\">\r\n {{ \"permissions.permissions\" | transloco }}\r\n </h2>\r\n </div>\r\n @if (permissionsLoading()) {\r\n <div class=\"mx-4\">\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"mx-4 mb-5 flex flex-row gap-3 rounded-lg border-1 border-surface p-3 sm:items-center sm:justify-between\"\r\n >\r\n <div class=\"flex min-w-0 items-start gap-3\">\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'security.lock-unlocked-01'\"\r\n shape=\"square\"\r\n size=\"large\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"'var(--p-' + 'primary' + '-600)'\"\r\n >\r\n </mt-avatar>\r\n <div class=\"min-w-0\">\r\n <div class=\"text-sm font-semibold\">\r\n {{ \"permissions.setAllPermissions\" | transloco }}\r\n </div>\r\n <div class=\"text-xs text-muted-color break-words\">\r\n {{ \"permissions.recommendedForSimpleForms\" | transloco }}\r\n </div>\r\n </div>\r\n </div>\r\n <mt-toggle-field\r\n class=\"self-end shrink-0 sm:self-center\"\r\n [formControl]=\"allPermissionsToggle\"\r\n ></mt-toggle-field>\r\n </div>\r\n\r\n <div\r\n class=\"min-h-0 flex-1 overflow-y-auto border-t border-surface px-4\"\r\n >\r\n @if (singlePermissionGroup(); as group) {\r\n <div\r\n class=\"my-5 rounded-lg border border-surface bg-surface-50 p-4\"\r\n >\r\n <div class=\"mb-4 flex items-start gap-3\">\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'editor.dotpoints-02'\"\r\n shape=\"square\"\r\n size=\"normal\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n 'var(--p-' + 'primary' + '-600)'\r\n \"\r\n >\r\n </mt-avatar>\r\n <span class=\"min-w-0 break-words text-sm font-medium\">\r\n {{ group.name?.display }}\r\n </span>\r\n </div>\r\n\r\n <mt-permissions-edit-dialog\r\n [inline]=\"true\"\r\n [permissionGroup]=\"group\"\r\n [levelId]=\"levelId()\"\r\n [roleValue]=\"permissionTargetValue()\"\r\n [isGroup]=\"selectedTab() !== 'roles'\"\r\n />\r\n </div>\r\n } @else {\r\n <div class=\"space-y-3 my-5\">\r\n @for (group of permissions(); track group.name) {\r\n <div\r\n class=\"flex flex-row gap-3 rounded-lg border-1 border-surface p-3 transition-colors hover:bg-surface-100 sm:items-center sm:justify-between\"\r\n >\r\n <div class=\"flex min-w-0 items-start gap-3\">\r\n <mt-avatar\r\n class=\"shrink-0\"\r\n [icon]=\"'editor.dotpoints-02'\"\r\n shape=\"square\"\r\n size=\"normal\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n 'var(--p-' + 'primary' + '-600)'\r\n \"\r\n >\r\n </mt-avatar>\r\n <span class=\"min-w-0 break-words text-sm\">\r\n {{ group.name?.display }}\r\n </span>\r\n </div>\r\n <mt-button\r\n class=\"self-end sm:self-auto\"\r\n [text]=\"true\"\r\n icon=\"custom.pencil\"\r\n severity=\"primary\"\r\n (click)=\"openPermissionDialog(group)\"\r\n >\r\n </mt-button>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noPermissionsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n }\r\n </div>\r\n</div>\r\n","// store/index.ts\r\nexport * from './permissions';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["PermissionsActions.LoadPermissions","PermissionsActions.LoadGroupPermissions","PermissionsActions.LoadRoles","PermissionsActions.SelectRole","PermissionsActions.SelectGroup","PermissionsActions.UpdatePermissionLocally","PermissionsActions.UpdatePermission","PermissionsActions.UpdateGroupPermission","PermissionsActions.ToggleAllLevelPermissions","PermissionsActions.ToggleAllGroupPermissions","PermissionsActions.SetModuleInfo","PermissionsActions.Reset","i2","i3"],"mappings":"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"}
package/package.json CHANGED
@@ -1,27 +1,27 @@
1
1
  {
2
2
  "name": "@masterteam/permissions",
3
- "version": "0.0.11",
3
+ "version": "0.0.13",
4
4
  "publishConfig": {
5
5
  "directory": "../../../dist/masterteam/permissions",
6
6
  "linkDirectory": false,
7
7
  "access": "public"
8
8
  },
9
9
  "peerDependencies": {
10
- "@angular/common": "^21.0.3",
11
- "@angular/core": "^21.0.3",
12
- "@angular/forms": "^21.0.3",
13
- "@angular/cdk": "^21.0.2",
14
- "@primeuix/themes": "^2.0.2",
15
- "@tailwindcss/postcss": "^4.1.17",
16
- "@jsverse/transloco": "^8.0.2",
17
- "postcss": "^8.5.6",
18
- "primeng": "21.0.1",
10
+ "@angular/common": "^21.2.8",
11
+ "@angular/core": "^21.2.8",
12
+ "@angular/forms": "^21.2.8",
13
+ "@angular/cdk": "^21.2.6",
14
+ "@primeuix/themes": "^2.0.3",
15
+ "@tailwindcss/postcss": "^4.2.2",
16
+ "@jsverse/transloco": "^8.3.0",
17
+ "postcss": "^8.5.9",
18
+ "primeng": "21.1.5",
19
19
  "rxjs": "^7.8.2",
20
- "tailwindcss": "^4.1.17",
20
+ "tailwindcss": "^4.2.2",
21
21
  "tailwindcss-primeui": "^0.6.1",
22
22
  "@ngxs/store": "^20.1.0",
23
- "@masterteam/components": "^0.0.124",
24
- "@masterteam/accessibilities": "^0.0.7"
23
+ "@masterteam/components": "^0.0.143",
24
+ "@masterteam/accessibilities": "^0.0.9"
25
25
  },
26
26
  "sideEffects": false,
27
27
  "exports": {
@@ -41,6 +41,7 @@
41
41
  },
42
42
  "module": "fesm2022/masterteam-permissions.mjs",
43
43
  "typings": "types/masterteam-permissions.d.ts",
44
+ "type": "module",
44
45
  "dependencies": {
45
46
  "tslib": "^2.8.1"
46
47
  }