@flusys/ng-iam 5.5.0 → 6.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{flusys-ng-iam-action-form-page.component-BGEON5_n.mjs → flusys-ng-iam-action-form-page.component-DTJT8Dc-.mjs} +56 -66
- package/fesm2022/flusys-ng-iam-action-form-page.component-DTJT8Dc-.mjs.map +1 -0
- package/fesm2022/{flusys-ng-iam-action-list-page.component-BQvx2btD.mjs → flusys-ng-iam-action-list-page.component-B1hUE4lD.mjs} +39 -46
- package/fesm2022/flusys-ng-iam-action-list-page.component-B1hUE4lD.mjs.map +1 -0
- package/fesm2022/{flusys-ng-iam-flusys-ng-iam-C9rdGS64.mjs → flusys-ng-iam-flusys-ng-iam-DzIO0zsO.mjs} +325 -385
- package/fesm2022/flusys-ng-iam-flusys-ng-iam-DzIO0zsO.mjs.map +1 -0
- package/fesm2022/flusys-ng-iam-iam-container.component-D0m8u6nu.mjs +105 -0
- package/fesm2022/flusys-ng-iam-iam-container.component-D0m8u6nu.mjs.map +1 -0
- package/fesm2022/{flusys-ng-iam-permission-page.component-DV8qtLcu.mjs → flusys-ng-iam-permission-page.component-rcijgKmE.mjs} +17 -20
- package/fesm2022/flusys-ng-iam-permission-page.component-rcijgKmE.mjs.map +1 -0
- package/fesm2022/{flusys-ng-iam-role-form-page.component-CR1tl17E.mjs → flusys-ng-iam-role-form-page.component-DrUQ0taO.mjs} +24 -26
- package/fesm2022/flusys-ng-iam-role-form-page.component-DrUQ0taO.mjs.map +1 -0
- package/fesm2022/{flusys-ng-iam-role-list-page.component-DVto37LL.mjs → flusys-ng-iam-role-list-page.component-BcS9_ysT.mjs} +35 -42
- package/fesm2022/flusys-ng-iam-role-list-page.component-BcS9_ysT.mjs.map +1 -0
- package/fesm2022/flusys-ng-iam.mjs +1 -1
- package/package.json +5 -7
- package/types/flusys-ng-iam.d.ts +2 -2
- package/fesm2022/flusys-ng-iam-action-form-page.component-BGEON5_n.mjs.map +0 -1
- package/fesm2022/flusys-ng-iam-action-list-page.component-BQvx2btD.mjs.map +0 -1
- package/fesm2022/flusys-ng-iam-flusys-ng-iam-C9rdGS64.mjs.map +0 -1
- package/fesm2022/flusys-ng-iam-iam-container.component-DEuc_l2i.mjs +0 -119
- package/fesm2022/flusys-ng-iam-iam-container.component-DEuc_l2i.mjs.map +0 -1
- package/fesm2022/flusys-ng-iam-permission-page.component-DV8qtLcu.mjs.map +0 -1
- package/fesm2022/flusys-ng-iam-role-form-page.component-CR1tl17E.mjs.map +0 -1
- package/fesm2022/flusys-ng-iam-role-list-page.component-DVto37LL.mjs.map +0 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Injectable, inject, signal, input, output, effect, Component, computed, DestroyRef } from '@angular/core';
|
|
3
|
-
import { ApiResourceService, TranslateService, PermissionValidatorService, AngularModule,
|
|
3
|
+
import { ApiResourceService, TranslateService, PermissionValidatorService, AngularModule, TranslatePipe, ROLE_ACTION_PERMISSIONS, HasPermissionDirective, COMPANY_ACTION_PERMISSIONS, COMPANY_API_PROVIDER, USER_ROLE_PERMISSIONS, USER_PERMISSION_PROVIDER, UserSelectComponent, USER_ACTION_PERMISSIONS, PROFILE_PERMISSION_PROVIDER, permissionGuard, ACTION_PERMISSIONS, ROLE_PERMISSIONS, anyPermissionGuard, resolveTranslationModule, SHARED_MESSAGES } from '@flusys/ng-shared';
|
|
4
4
|
import { APP_CONFIG, getServiceUrl, BaseApiService, isCompanyFeatureEnabled } from '@flusys/ng-core';
|
|
5
|
-
import
|
|
5
|
+
import * as i2 from '@flusys/ng-ui';
|
|
6
|
+
import { ConfirmationService, MessageService, UiModule } from '@flusys/ng-ui';
|
|
6
7
|
import { HttpClient } from '@angular/common/http';
|
|
7
8
|
import { of, firstValueFrom, map as map$1 } from 'rxjs';
|
|
8
9
|
import { tap, catchError, map } from 'rxjs/operators';
|
|
@@ -10,14 +11,7 @@ import * as i1 from '@angular/common';
|
|
|
10
11
|
import { CommonModule } from '@angular/common';
|
|
11
12
|
import * as i1$1 from '@angular/forms';
|
|
12
13
|
import { FormsModule } from '@angular/forms';
|
|
13
|
-
import * as i2 from 'primeng/button';
|
|
14
|
-
import * as i6 from 'primeng/tooltip';
|
|
15
|
-
import * as i3 from 'primeng/checkbox';
|
|
16
|
-
import * as i4 from 'primeng/select';
|
|
17
|
-
import * as i5 from 'primeng/tag';
|
|
18
|
-
import * as i7 from 'primeng/treetable';
|
|
19
14
|
import { LAYOUT_AUTH_STATE } from '@flusys/ng-layout';
|
|
20
|
-
import * as i5$1 from 'primeng/table';
|
|
21
15
|
|
|
22
16
|
/** Must match backend ActionType enum */
|
|
23
17
|
var ActionType;
|
|
@@ -227,10 +221,10 @@ class RoleApiService extends ApiResourceService {
|
|
|
227
221
|
constructor() {
|
|
228
222
|
super('roles', 'iam');
|
|
229
223
|
}
|
|
230
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
231
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
224
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RoleApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
225
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RoleApiService, providedIn: 'root' });
|
|
232
226
|
}
|
|
233
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
227
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RoleApiService, decorators: [{
|
|
234
228
|
type: Injectable,
|
|
235
229
|
args: [{ providedIn: 'root' }]
|
|
236
230
|
}], ctorParameters: () => [] });
|
|
@@ -257,10 +251,10 @@ class ActionApiService extends ApiResourceService {
|
|
|
257
251
|
const iamBaseUrl = getServiceUrl(this.appConfig, 'iam');
|
|
258
252
|
return this.http.post(`${iamBaseUrl}/actions/tree`, body);
|
|
259
253
|
}
|
|
260
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
261
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
254
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
255
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionApiService, providedIn: 'root' });
|
|
262
256
|
}
|
|
263
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
257
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionApiService, decorators: [{
|
|
264
258
|
type: Injectable,
|
|
265
259
|
args: [{ providedIn: 'root' }]
|
|
266
260
|
}], ctorParameters: () => [] });
|
|
@@ -403,11 +397,11 @@ class ActionPermissionLogicService {
|
|
|
403
397
|
this.confirmationService.confirm({
|
|
404
398
|
header: this.t('iam.logic.validation.failed'),
|
|
405
399
|
message: `${this.t('iam.logic.validation.failed.message')}<br/><br/><ul class="pl-4">${errorList}</ul><br/>${this.t('iam.logic.validation.failed.prompt')}`,
|
|
406
|
-
icon: '
|
|
400
|
+
icon: 'exclamation-triangle',
|
|
407
401
|
acceptLabel: this.t('iam.logic.auto.fix'),
|
|
408
402
|
rejectLabel: this.t('shared.cancel'),
|
|
409
|
-
acceptIcon: '
|
|
410
|
-
rejectIcon: '
|
|
403
|
+
acceptIcon: 'trash',
|
|
404
|
+
rejectIcon: 'times',
|
|
411
405
|
acceptButtonStyleClass: 'p-button-warning',
|
|
412
406
|
closeOnEscape: false,
|
|
413
407
|
closable: false,
|
|
@@ -419,7 +413,7 @@ class ActionPermissionLogicService {
|
|
|
419
413
|
});
|
|
420
414
|
onUpdate(selMap);
|
|
421
415
|
this.messageService.add({
|
|
422
|
-
severity: '
|
|
416
|
+
severity: 'warn',
|
|
423
417
|
summary: this.t('iam.logic.invalid.actions.removed'),
|
|
424
418
|
detail: this.t('iam.logic.removed.actions.detail', {
|
|
425
419
|
count: invalidActions.length,
|
|
@@ -532,11 +526,11 @@ class ActionPermissionLogicService {
|
|
|
532
526
|
this.confirmationService.confirm({
|
|
533
527
|
header: this.t('iam.logic.missing.prerequisites'),
|
|
534
528
|
message: `<strong>${sanitizedActionName}</strong> ${this.t('iam.logic.requires.conditions')}<br/><br/>${logicMessage}<br/><br/><strong>${autoSelectPrompt}</strong><br/>${this.t('iam.logic.would.you.continue')}`,
|
|
535
|
-
icon: '
|
|
529
|
+
icon: 'exclamation-triangle',
|
|
536
530
|
acceptLabel,
|
|
537
531
|
rejectLabel: this.t('shared.cancel'),
|
|
538
|
-
acceptIcon: '
|
|
539
|
-
rejectIcon: '
|
|
532
|
+
acceptIcon: 'check',
|
|
533
|
+
rejectIcon: 'times',
|
|
540
534
|
closeOnEscape: false,
|
|
541
535
|
closable: false,
|
|
542
536
|
accept: () => {
|
|
@@ -584,13 +578,13 @@ class ActionPermissionLogicService {
|
|
|
584
578
|
this.confirmationService.confirm({
|
|
585
579
|
header: this.t('iam.logic.dependency.warning'),
|
|
586
580
|
message,
|
|
587
|
-
icon: '
|
|
581
|
+
icon: 'exclamation-triangle',
|
|
588
582
|
acceptLabel: alternatives.length > 0
|
|
589
583
|
? this.t('iam.logic.use.alternatives')
|
|
590
584
|
: this.t('iam.logic.remove.all'),
|
|
591
585
|
rejectLabel: this.t('shared.cancel'),
|
|
592
|
-
acceptIcon: '
|
|
593
|
-
rejectIcon: '
|
|
586
|
+
acceptIcon: 'check',
|
|
587
|
+
rejectIcon: 'times',
|
|
594
588
|
closeOnEscape: false,
|
|
595
589
|
closable: false,
|
|
596
590
|
accept: () => {
|
|
@@ -794,10 +788,10 @@ class ActionPermissionLogicService {
|
|
|
794
788
|
}
|
|
795
789
|
return `${indent}${this.t('iam.logic.invalid')}`;
|
|
796
790
|
}
|
|
797
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
798
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
791
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionPermissionLogicService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
792
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionPermissionLogicService, providedIn: 'root' });
|
|
799
793
|
}
|
|
800
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
794
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionPermissionLogicService, decorators: [{
|
|
801
795
|
type: Injectable,
|
|
802
796
|
args: [{ providedIn: 'root' }]
|
|
803
797
|
}] });
|
|
@@ -830,10 +824,10 @@ class PermissionApiService extends BaseApiService {
|
|
|
830
824
|
getCompanyActions(companyId) {
|
|
831
825
|
return this.http.post(this.getUrl('permissions/get-company-actions'), { companyId });
|
|
832
826
|
}
|
|
833
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
834
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
827
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
828
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionApiService, providedIn: 'root' });
|
|
835
829
|
}
|
|
836
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
830
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionApiService, decorators: [{
|
|
837
831
|
type: Injectable,
|
|
838
832
|
args: [{ providedIn: 'root' }]
|
|
839
833
|
}], ctorParameters: () => [] });
|
|
@@ -857,10 +851,10 @@ class MyPermissionsApiService {
|
|
|
857
851
|
getMyPermissions(dto = {}) {
|
|
858
852
|
return this.http.post(`${this.baseUrl}/my-permissions`, dto);
|
|
859
853
|
}
|
|
860
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
861
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
854
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MyPermissionsApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
855
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MyPermissionsApiService, providedIn: 'root' });
|
|
862
856
|
}
|
|
863
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
857
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MyPermissionsApiService, decorators: [{
|
|
864
858
|
type: Injectable,
|
|
865
859
|
args: [{
|
|
866
860
|
providedIn: 'root',
|
|
@@ -893,10 +887,10 @@ class PermissionStateService {
|
|
|
893
887
|
isLoaded() {
|
|
894
888
|
return this._permissions() !== null && this.permissionValidator.isPermissionsLoaded();
|
|
895
889
|
}
|
|
896
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
897
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
890
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
891
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionStateService, providedIn: 'root' });
|
|
898
892
|
}
|
|
899
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
893
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionStateService, decorators: [{
|
|
900
894
|
type: Injectable,
|
|
901
895
|
args: [{ providedIn: 'root' }]
|
|
902
896
|
}] });
|
|
@@ -1015,8 +1009,8 @@ class LogicBuilderComponent {
|
|
|
1015
1009
|
.map((child) => this.removeNodeFromTree(child, targetId)),
|
|
1016
1010
|
};
|
|
1017
1011
|
}
|
|
1018
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
1019
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
1012
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LogicBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1013
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: LogicBuilderComponent, isStandalone: true, selector: "lib-logic-builder", inputs: { logic: { classPropertyName: "logic", publicName: "logic", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { logicChange: "logicChange" }, ngImport: i0, template: `
|
|
1020
1014
|
<div class="logic-builder">
|
|
1021
1015
|
<div class="flex justify-between items-center mb-3">
|
|
1022
1016
|
<h4 class="text-sm font-semibold m-0">
|
|
@@ -1024,22 +1018,22 @@ class LogicBuilderComponent {
|
|
|
1024
1018
|
</h4>
|
|
1025
1019
|
@if (!builderLogic()) {
|
|
1026
1020
|
<button
|
|
1027
|
-
|
|
1021
|
+
fButton
|
|
1028
1022
|
size="small"
|
|
1029
1023
|
(click)="initializeLogic()"
|
|
1030
1024
|
>
|
|
1031
|
-
<
|
|
1025
|
+
<ui-icon pButtonIcon name="plus"></ui-icon>
|
|
1032
1026
|
<span pButtonLabel>{{ 'iam.logic.add.logic' | translate }}</span>
|
|
1033
1027
|
</button>
|
|
1034
1028
|
} @else {
|
|
1035
1029
|
<button
|
|
1036
|
-
|
|
1030
|
+
fButton
|
|
1037
1031
|
size="small"
|
|
1038
1032
|
severity="danger"
|
|
1039
1033
|
[outlined]="true"
|
|
1040
1034
|
(click)="clearLogic()"
|
|
1041
1035
|
>
|
|
1042
|
-
<
|
|
1036
|
+
<ui-icon pButtonIcon name="trash"></ui-icon>
|
|
1043
1037
|
<span pButtonLabel>{{ 'iam.logic.clear.logic' | translate }}</span>
|
|
1044
1038
|
</button>
|
|
1045
1039
|
}
|
|
@@ -1087,7 +1081,7 @@ class LogicBuilderComponent {
|
|
|
1087
1081
|
[class.and]="node.operator === 'AND'"
|
|
1088
1082
|
[class.or]="node.operator !== 'AND'"
|
|
1089
1083
|
(click)="toggleOperator(node.id)"
|
|
1090
|
-
[
|
|
1084
|
+
[fTooltip]="'iam.logic.click.to.toggle' | translate"
|
|
1091
1085
|
>
|
|
1092
1086
|
{{ node.operator }}
|
|
1093
1087
|
</span>
|
|
@@ -1100,35 +1094,29 @@ class LogicBuilderComponent {
|
|
|
1100
1094
|
}
|
|
1101
1095
|
|
|
1102
1096
|
@if (node.type === 'action') {
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1097
|
+
<f-select
|
|
1098
|
+
class="flex-1"
|
|
1099
|
+
[options]="actions()"
|
|
1100
|
+
optionLabel="name"
|
|
1101
|
+
optionValue="id"
|
|
1106
1102
|
[ngModel]="node.actionId"
|
|
1107
1103
|
(ngModelChange)="updateActionId(node.id, $event)"
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
'iam.logic.actions.available'
|
|
1112
|
-
| translate: { count: actions().length }
|
|
1113
|
-
}})
|
|
1114
|
-
</option>
|
|
1115
|
-
@for (action of actions(); track action.id) {
|
|
1116
|
-
<option [ngValue]="action.id">{{ action.name }}</option>
|
|
1117
|
-
}
|
|
1118
|
-
</select>
|
|
1104
|
+
[placeholder]="'iam.logic.select.action' | translate"
|
|
1105
|
+
[filter]="true"
|
|
1106
|
+
/>
|
|
1119
1107
|
}
|
|
1120
1108
|
</div>
|
|
1121
1109
|
|
|
1122
1110
|
<div class="flex gap-1">
|
|
1123
1111
|
<button
|
|
1124
|
-
|
|
1112
|
+
fButton
|
|
1125
1113
|
[text]="true"
|
|
1126
1114
|
severity="danger"
|
|
1127
1115
|
size="small"
|
|
1128
1116
|
(click)="removeNode(node.id)"
|
|
1129
|
-
[
|
|
1117
|
+
[fTooltip]="'shared.remove' | translate"
|
|
1130
1118
|
>
|
|
1131
|
-
<
|
|
1119
|
+
<ui-icon pButtonIcon name="trash"></ui-icon>
|
|
1132
1120
|
</button>
|
|
1133
1121
|
</div>
|
|
1134
1122
|
</div>
|
|
@@ -1159,22 +1147,22 @@ class LogicBuilderComponent {
|
|
|
1159
1147
|
</div>
|
|
1160
1148
|
<div class="flex gap-2 flex-wrap">
|
|
1161
1149
|
<button
|
|
1162
|
-
|
|
1150
|
+
fButton
|
|
1163
1151
|
size="small"
|
|
1164
1152
|
[outlined]="true"
|
|
1165
1153
|
(click)="addChildNode(node.id, 'group')"
|
|
1166
1154
|
>
|
|
1167
|
-
<
|
|
1155
|
+
<ui-icon pButtonIcon name="sitemap"></ui-icon>
|
|
1168
1156
|
<span pButtonLabel>{{ 'iam.logic.group' | translate }}</span>
|
|
1169
1157
|
</button>
|
|
1170
1158
|
<button
|
|
1171
|
-
|
|
1159
|
+
fButton
|
|
1172
1160
|
size="small"
|
|
1173
1161
|
severity="success"
|
|
1174
1162
|
[outlined]="true"
|
|
1175
1163
|
(click)="addChildNode(node.id, 'action')"
|
|
1176
1164
|
>
|
|
1177
|
-
<
|
|
1165
|
+
<ui-icon pButtonIcon name="bolt"></ui-icon>
|
|
1178
1166
|
<span pButtonLabel>{{ 'iam.logic.action' | translate }}</span>
|
|
1179
1167
|
</button>
|
|
1180
1168
|
</div>
|
|
@@ -1182,11 +1170,11 @@ class LogicBuilderComponent {
|
|
|
1182
1170
|
}
|
|
1183
1171
|
</div>
|
|
1184
1172
|
</ng-template>
|
|
1185
|
-
`, isInline: true, styles: [":host{display:block}.node-type{display:inline-flex;align-items:center;padding:.25rem .5rem;border-radius:.25rem;font-weight:600;font-size:.75rem;text-transform:uppercase}.node-type.group{background-color:var(--
|
|
1173
|
+
`, isInline: true, styles: [":host{display:block}.node-type{display:inline-flex;align-items:center;padding:.25rem .5rem;border-radius:.25rem;font-weight:600;font-size:.75rem;text-transform:uppercase}.node-type.group{background-color:var(--f-blue-100, #dbeafe);color:var(--f-blue-700, #1e40af)}.node-type.action{background-color:var(--f-green-100, #d1fae5);color:var(--f-green-700, #065f46)}:host-context(.p-dark) .node-type.group{background-color:#3b82f633;color:var(--f-blue-400, #60a5fa)}:host-context(.p-dark) .node-type.action{background-color:#22c55e33;color:var(--f-green-400, #4ade80)}.operator-badge{display:inline-flex;align-items:center;padding:.125rem .5rem;border-radius:9999px;font-weight:600;font-size:.75rem;cursor:pointer;transition:opacity .2s}.operator-badge.and{background-color:var(--f-yellow-100, #fef3c7);color:var(--f-yellow-700, #92400e)}.operator-badge.or{background-color:var(--f-indigo-100, #e0e7ff);color:var(--f-indigo-700, #3730a3)}:host-context(.p-dark) .operator-badge.and{background-color:#eab30833;color:var(--f-yellow-400, #facc15)}:host-context(.p-dark) .operator-badge.or{background-color:#6366f133;color:var(--f-indigo-400, #818cf8)}.operator-badge:hover{opacity:.8}.action-select{background-color:var(--f-surface-0, #ffffff);color:var(--f-text-color, #1f2937)}:host-context(.p-dark) .action-select{background-color:var(--f-surface-900, #1f2937);color:var(--f-text-color, #f9fafb)}.action-select:focus{outline:none;border-color:var(--f-primary-color, #3b82f6)}\n"], dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i2.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "rounded", "raised", "fluid", "disabled", "loading", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i2.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "showClear", "loading", "inputId", "invalid", "touched", "styleClass", "editable"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur"] }, { kind: "directive", type: i2.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
1186
1174
|
}
|
|
1187
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
1175
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LogicBuilderComponent, decorators: [{
|
|
1188
1176
|
type: Component,
|
|
1189
|
-
args: [{ selector: 'lib-logic-builder', imports: [AngularModule,
|
|
1177
|
+
args: [{ selector: 'lib-logic-builder', imports: [AngularModule, UiModule, TranslatePipe], template: `
|
|
1190
1178
|
<div class="logic-builder">
|
|
1191
1179
|
<div class="flex justify-between items-center mb-3">
|
|
1192
1180
|
<h4 class="text-sm font-semibold m-0">
|
|
@@ -1194,22 +1182,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1194
1182
|
</h4>
|
|
1195
1183
|
@if (!builderLogic()) {
|
|
1196
1184
|
<button
|
|
1197
|
-
|
|
1185
|
+
fButton
|
|
1198
1186
|
size="small"
|
|
1199
1187
|
(click)="initializeLogic()"
|
|
1200
1188
|
>
|
|
1201
|
-
<
|
|
1189
|
+
<ui-icon pButtonIcon name="plus"></ui-icon>
|
|
1202
1190
|
<span pButtonLabel>{{ 'iam.logic.add.logic' | translate }}</span>
|
|
1203
1191
|
</button>
|
|
1204
1192
|
} @else {
|
|
1205
1193
|
<button
|
|
1206
|
-
|
|
1194
|
+
fButton
|
|
1207
1195
|
size="small"
|
|
1208
1196
|
severity="danger"
|
|
1209
1197
|
[outlined]="true"
|
|
1210
1198
|
(click)="clearLogic()"
|
|
1211
1199
|
>
|
|
1212
|
-
<
|
|
1200
|
+
<ui-icon pButtonIcon name="trash"></ui-icon>
|
|
1213
1201
|
<span pButtonLabel>{{ 'iam.logic.clear.logic' | translate }}</span>
|
|
1214
1202
|
</button>
|
|
1215
1203
|
}
|
|
@@ -1257,7 +1245,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1257
1245
|
[class.and]="node.operator === 'AND'"
|
|
1258
1246
|
[class.or]="node.operator !== 'AND'"
|
|
1259
1247
|
(click)="toggleOperator(node.id)"
|
|
1260
|
-
[
|
|
1248
|
+
[fTooltip]="'iam.logic.click.to.toggle' | translate"
|
|
1261
1249
|
>
|
|
1262
1250
|
{{ node.operator }}
|
|
1263
1251
|
</span>
|
|
@@ -1270,35 +1258,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1270
1258
|
}
|
|
1271
1259
|
|
|
1272
1260
|
@if (node.type === 'action') {
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1261
|
+
<f-select
|
|
1262
|
+
class="flex-1"
|
|
1263
|
+
[options]="actions()"
|
|
1264
|
+
optionLabel="name"
|
|
1265
|
+
optionValue="id"
|
|
1276
1266
|
[ngModel]="node.actionId"
|
|
1277
1267
|
(ngModelChange)="updateActionId(node.id, $event)"
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
'iam.logic.actions.available'
|
|
1282
|
-
| translate: { count: actions().length }
|
|
1283
|
-
}})
|
|
1284
|
-
</option>
|
|
1285
|
-
@for (action of actions(); track action.id) {
|
|
1286
|
-
<option [ngValue]="action.id">{{ action.name }}</option>
|
|
1287
|
-
}
|
|
1288
|
-
</select>
|
|
1268
|
+
[placeholder]="'iam.logic.select.action' | translate"
|
|
1269
|
+
[filter]="true"
|
|
1270
|
+
/>
|
|
1289
1271
|
}
|
|
1290
1272
|
</div>
|
|
1291
1273
|
|
|
1292
1274
|
<div class="flex gap-1">
|
|
1293
1275
|
<button
|
|
1294
|
-
|
|
1276
|
+
fButton
|
|
1295
1277
|
[text]="true"
|
|
1296
1278
|
severity="danger"
|
|
1297
1279
|
size="small"
|
|
1298
1280
|
(click)="removeNode(node.id)"
|
|
1299
|
-
[
|
|
1281
|
+
[fTooltip]="'shared.remove' | translate"
|
|
1300
1282
|
>
|
|
1301
|
-
<
|
|
1283
|
+
<ui-icon pButtonIcon name="trash"></ui-icon>
|
|
1302
1284
|
</button>
|
|
1303
1285
|
</div>
|
|
1304
1286
|
</div>
|
|
@@ -1329,22 +1311,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1329
1311
|
</div>
|
|
1330
1312
|
<div class="flex gap-2 flex-wrap">
|
|
1331
1313
|
<button
|
|
1332
|
-
|
|
1314
|
+
fButton
|
|
1333
1315
|
size="small"
|
|
1334
1316
|
[outlined]="true"
|
|
1335
1317
|
(click)="addChildNode(node.id, 'group')"
|
|
1336
1318
|
>
|
|
1337
|
-
<
|
|
1319
|
+
<ui-icon pButtonIcon name="sitemap"></ui-icon>
|
|
1338
1320
|
<span pButtonLabel>{{ 'iam.logic.group' | translate }}</span>
|
|
1339
1321
|
</button>
|
|
1340
1322
|
<button
|
|
1341
|
-
|
|
1323
|
+
fButton
|
|
1342
1324
|
size="small"
|
|
1343
1325
|
severity="success"
|
|
1344
1326
|
[outlined]="true"
|
|
1345
1327
|
(click)="addChildNode(node.id, 'action')"
|
|
1346
1328
|
>
|
|
1347
|
-
<
|
|
1329
|
+
<ui-icon pButtonIcon name="bolt"></ui-icon>
|
|
1348
1330
|
<span pButtonLabel>{{ 'iam.logic.action' | translate }}</span>
|
|
1349
1331
|
</button>
|
|
1350
1332
|
</div>
|
|
@@ -1352,7 +1334,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1352
1334
|
}
|
|
1353
1335
|
</div>
|
|
1354
1336
|
</ng-template>
|
|
1355
|
-
`, styles: [":host{display:block}.node-type{display:inline-flex;align-items:center;padding:.25rem .5rem;border-radius:.25rem;font-weight:600;font-size:.75rem;text-transform:uppercase}.node-type.group{background-color:var(--
|
|
1337
|
+
`, styles: [":host{display:block}.node-type{display:inline-flex;align-items:center;padding:.25rem .5rem;border-radius:.25rem;font-weight:600;font-size:.75rem;text-transform:uppercase}.node-type.group{background-color:var(--f-blue-100, #dbeafe);color:var(--f-blue-700, #1e40af)}.node-type.action{background-color:var(--f-green-100, #d1fae5);color:var(--f-green-700, #065f46)}:host-context(.p-dark) .node-type.group{background-color:#3b82f633;color:var(--f-blue-400, #60a5fa)}:host-context(.p-dark) .node-type.action{background-color:#22c55e33;color:var(--f-green-400, #4ade80)}.operator-badge{display:inline-flex;align-items:center;padding:.125rem .5rem;border-radius:9999px;font-weight:600;font-size:.75rem;cursor:pointer;transition:opacity .2s}.operator-badge.and{background-color:var(--f-yellow-100, #fef3c7);color:var(--f-yellow-700, #92400e)}.operator-badge.or{background-color:var(--f-indigo-100, #e0e7ff);color:var(--f-indigo-700, #3730a3)}:host-context(.p-dark) .operator-badge.and{background-color:#eab30833;color:var(--f-yellow-400, #facc15)}:host-context(.p-dark) .operator-badge.or{background-color:#6366f133;color:var(--f-indigo-400, #818cf8)}.operator-badge:hover{opacity:.8}.action-select{background-color:var(--f-surface-0, #ffffff);color:var(--f-text-color, #1f2937)}:host-context(.p-dark) .action-select{background-color:var(--f-surface-900, #1f2937);color:var(--f-text-color, #f9fafb)}.action-select:focus{outline:none;border-color:var(--f-primary-color, #3b82f6)}\n"] }]
|
|
1356
1338
|
}], ctorParameters: () => [], propDecorators: { logic: [{ type: i0.Input, args: [{ isSignal: true, alias: "logic", required: false }] }], actions: [{ type: i0.Input, args: [{ isSignal: true, alias: "actions", required: false }] }], logicChange: [{ type: i0.Output, args: ["logicChange"] }] } });
|
|
1357
1339
|
|
|
1358
1340
|
function flattenTree(tree) {
|
|
@@ -1656,8 +1638,8 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
1656
1638
|
this.saving.set(false);
|
|
1657
1639
|
}
|
|
1658
1640
|
}
|
|
1659
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
1660
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
1641
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RoleActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1642
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: RoleActionSelectorComponent, isStandalone: true, selector: "flusys-role-action-selector", usesInheritance: true, ngImport: i0, template: `
|
|
1661
1643
|
<div class="role-action-selector">
|
|
1662
1644
|
<div class="mb-4">
|
|
1663
1645
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
|
@@ -1665,7 +1647,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
1665
1647
|
<label class="block font-semibold mb-2">{{
|
|
1666
1648
|
'iam.permission.select.role' | translate
|
|
1667
1649
|
}}</label>
|
|
1668
|
-
<
|
|
1650
|
+
<f-select
|
|
1669
1651
|
[ngModel]="selectedRoleId()"
|
|
1670
1652
|
(ngModelChange)="selectedRoleId.set($event)"
|
|
1671
1653
|
[options]="roles()"
|
|
@@ -1687,7 +1669,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
1687
1669
|
<div
|
|
1688
1670
|
class="surface-card p-5 rounded-border shadow-sm flex justify-center"
|
|
1689
1671
|
>
|
|
1690
|
-
<
|
|
1672
|
+
<ui-icon name="loader-circle" spin class="text-primary text-5xl"></ui-icon>
|
|
1691
1673
|
</div>
|
|
1692
1674
|
}
|
|
1693
1675
|
|
|
@@ -1709,36 +1691,36 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
1709
1691
|
</div>
|
|
1710
1692
|
<div class="flex flex-wrap gap-2">
|
|
1711
1693
|
<button
|
|
1712
|
-
|
|
1694
|
+
fButton
|
|
1713
1695
|
[outlined]="true"
|
|
1714
1696
|
size="small"
|
|
1715
1697
|
severity="secondary"
|
|
1716
1698
|
(click)="selectAll()"
|
|
1717
1699
|
>
|
|
1718
|
-
<
|
|
1700
|
+
<ui-icon pButtonIcon name="check"></ui-icon>
|
|
1719
1701
|
<span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
|
|
1720
1702
|
</button>
|
|
1721
1703
|
<button
|
|
1722
|
-
|
|
1704
|
+
fButton
|
|
1723
1705
|
[outlined]="true"
|
|
1724
1706
|
size="small"
|
|
1725
1707
|
severity="secondary"
|
|
1726
1708
|
(click)="deselectAll()"
|
|
1727
1709
|
>
|
|
1728
|
-
<
|
|
1710
|
+
<ui-icon pButtonIcon name="times"></ui-icon>
|
|
1729
1711
|
<span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
|
|
1730
1712
|
</button>
|
|
1731
1713
|
<button
|
|
1732
|
-
|
|
1714
|
+
fButton
|
|
1733
1715
|
*hasPermission="ROLE_ACTION_PERMISSIONS.ASSIGN"
|
|
1734
1716
|
[disabled]="!canSave() || saving()"
|
|
1735
1717
|
size="small"
|
|
1736
1718
|
(click)="saveChanges()"
|
|
1737
1719
|
>
|
|
1738
1720
|
@if (saving()) {
|
|
1739
|
-
<
|
|
1721
|
+
<ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
|
|
1740
1722
|
} @else {
|
|
1741
|
-
<
|
|
1723
|
+
<ui-icon pButtonIcon name="save"></ui-icon>
|
|
1742
1724
|
}
|
|
1743
1725
|
<span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
|
|
1744
1726
|
</button>
|
|
@@ -1748,7 +1730,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
1748
1730
|
@if (invalidActionsCount() > 0) {
|
|
1749
1731
|
<div class="validation-warning rounded-border p-3 mb-4">
|
|
1750
1732
|
<div class="flex items-start gap-2">
|
|
1751
|
-
<
|
|
1733
|
+
<ui-icon name="exclamation-triangle" class="text-xl"></ui-icon>
|
|
1752
1734
|
<div class="flex-1">
|
|
1753
1735
|
<span class="font-semibold"
|
|
1754
1736
|
>{{ 'iam.validation.warning.title' | translate }}:</span
|
|
@@ -1767,20 +1749,19 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
1767
1749
|
}
|
|
1768
1750
|
|
|
1769
1751
|
<div class="overflow-x-auto -mx-4 sm:mx-0">
|
|
1770
|
-
<
|
|
1752
|
+
<f-treetable
|
|
1771
1753
|
[value]="treeNodes()"
|
|
1772
1754
|
dataKey="id"
|
|
1773
|
-
class="p-treetable-sm"
|
|
1774
1755
|
[tableStyle]="{ 'min-width': '50rem' }"
|
|
1775
1756
|
>
|
|
1776
1757
|
<ng-template #header>
|
|
1777
1758
|
<tr>
|
|
1778
1759
|
<th class="w-12">
|
|
1779
|
-
<
|
|
1760
|
+
<f-checkbox
|
|
1780
1761
|
[ngModel]="allSelected()"
|
|
1781
1762
|
[binary]="true"
|
|
1782
1763
|
(ngModelChange)="toggleAll()"
|
|
1783
|
-
[
|
|
1764
|
+
[fTooltip]="'shared.select.deselect.all' | translate"
|
|
1784
1765
|
tooltipPosition="top"
|
|
1785
1766
|
/>
|
|
1786
1767
|
</th>
|
|
@@ -1799,27 +1780,24 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
1799
1780
|
@let tooltip = getTooltip(rowData);
|
|
1800
1781
|
<tr [class.highlight-warning]="hasUnmet">
|
|
1801
1782
|
<td class="w-12">
|
|
1802
|
-
<
|
|
1783
|
+
<f-checkbox
|
|
1803
1784
|
[ngModel]="selectionMap()[rowData.id]"
|
|
1804
1785
|
[binary]="true"
|
|
1805
1786
|
(ngModelChange)="onActionToggle(rowData, $event)"
|
|
1806
|
-
[
|
|
1787
|
+
[fTooltip]="tooltip"
|
|
1807
1788
|
tooltipPosition="top"
|
|
1808
1789
|
/>
|
|
1809
1790
|
</td>
|
|
1810
1791
|
<td>
|
|
1811
|
-
<
|
|
1792
|
+
<f-treetabletoggler [rowNode]="rowNode" />
|
|
1812
1793
|
<span class="inline-flex items-center gap-2">
|
|
1813
1794
|
{{ rowData.name }}
|
|
1814
1795
|
@if (hasUnmet) {
|
|
1815
|
-
<
|
|
1816
|
-
class="pi pi-exclamation-triangle text-orange-500"
|
|
1817
|
-
[pTooltip]="
|
|
1796
|
+
<ui-icon name="exclamation-triangle" class="text-orange-500" [fTooltip]="
|
|
1818
1797
|
'iam.validation.unmet.prerequisites.tooltip'
|
|
1819
1798
|
| translate
|
|
1820
1799
|
"
|
|
1821
|
-
tooltipPosition="top"
|
|
1822
|
-
></i>
|
|
1800
|
+
tooltipPosition="top"></ui-icon>
|
|
1823
1801
|
}
|
|
1824
1802
|
</span>
|
|
1825
1803
|
</td>
|
|
@@ -1827,7 +1805,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
1827
1805
|
{{ rowData.code || '-' }}
|
|
1828
1806
|
</td>
|
|
1829
1807
|
<td>
|
|
1830
|
-
<
|
|
1808
|
+
<f-tag
|
|
1831
1809
|
[value]="rowData.actionType"
|
|
1832
1810
|
[severity]="
|
|
1833
1811
|
rowData.actionType === 'backend' ? 'info' : 'success'
|
|
@@ -1849,7 +1827,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
1849
1827
|
<tr>
|
|
1850
1828
|
<td colspan="5" class="text-center p-4 text-muted-color">
|
|
1851
1829
|
@if (loading()) {
|
|
1852
|
-
<
|
|
1830
|
+
<ui-icon name="loader-circle" spin></ui-icon>
|
|
1853
1831
|
{{ 'shared.loading.actions' | translate }}
|
|
1854
1832
|
} @else {
|
|
1855
1833
|
{{ 'iam.permission.no.actions.available' | translate }}
|
|
@@ -1857,14 +1835,14 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
1857
1835
|
</td>
|
|
1858
1836
|
</tr>
|
|
1859
1837
|
</ng-template>
|
|
1860
|
-
</
|
|
1838
|
+
</f-treetable>
|
|
1861
1839
|
</div>
|
|
1862
1840
|
</div>
|
|
1863
1841
|
|
|
1864
1842
|
@if (hasChanges()) {
|
|
1865
1843
|
<div class="border border-surface rounded-border p-3 mt-4">
|
|
1866
1844
|
<div class="flex items-center gap-2 mb-3">
|
|
1867
|
-
<
|
|
1845
|
+
<ui-icon name="info-circle" class="text-primary"></ui-icon>
|
|
1868
1846
|
<span class="font-bold">{{
|
|
1869
1847
|
'shared.pending.changes' | translate
|
|
1870
1848
|
}}</span>
|
|
@@ -1873,7 +1851,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
1873
1851
|
@if (pendingAdd().length > 0) {
|
|
1874
1852
|
<div>
|
|
1875
1853
|
<div class="flex items-center gap-2 mb-2">
|
|
1876
|
-
<
|
|
1854
|
+
<ui-icon name="plus-circle" class="text-green-500"></ui-icon>
|
|
1877
1855
|
<strong class="text-sm"
|
|
1878
1856
|
>{{ 'shared.to.add' | translate }} ({{
|
|
1879
1857
|
pendingAdd().length
|
|
@@ -1890,7 +1868,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
1890
1868
|
@if (pendingRemove().length > 0) {
|
|
1891
1869
|
<div>
|
|
1892
1870
|
<div class="flex items-center gap-2 mb-2">
|
|
1893
|
-
<
|
|
1871
|
+
<ui-icon name="minus-circle" class="text-red-500"></ui-icon>
|
|
1894
1872
|
<strong class="text-sm"
|
|
1895
1873
|
>{{ 'shared.to.remove' | translate }} ({{
|
|
1896
1874
|
pendingRemove().length
|
|
@@ -1911,9 +1889,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
1911
1889
|
|
|
1912
1890
|
@if (!loading() && actions().length === 0) {
|
|
1913
1891
|
<div class="surface-card p-5 rounded-border shadow-sm text-center">
|
|
1914
|
-
<
|
|
1915
|
-
class="pi pi-info-circle text-muted-color mb-3 block text-5xl"
|
|
1916
|
-
></i>
|
|
1892
|
+
<ui-icon name="info-circle" class="text-muted-color mb-3 block text-5xl"></ui-icon>
|
|
1917
1893
|
<p class="text-muted-color m-0">
|
|
1918
1894
|
{{ 'iam.permission.no.actions.for.role' | translate }}
|
|
1919
1895
|
</p>
|
|
@@ -1921,11 +1897,11 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
1921
1897
|
}
|
|
1922
1898
|
}
|
|
1923
1899
|
</div>
|
|
1924
|
-
`, isInline: true, styles: [":host{display:block}.validation-warning{background-color:var(--
|
|
1900
|
+
`, isInline: true, styles: [":host{display:block}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i2.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "rounded", "raised", "fluid", "disabled", "loading", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i2.TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color"] }, { kind: "component", type: i2.CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "inputId", "invalid", "indeterminate", "touched", "styleClass", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "component", type: i2.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "showClear", "loading", "inputId", "invalid", "touched", "styleClass", "editable"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur"] }, { kind: "directive", type: i2.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay"] }, { kind: "component", type: i2.TreeTableComponent, selector: "f-treetable", inputs: ["value", "loading", "dataKey", "styleClass", "tableStyle", "scrollable"] }, { kind: "component", type: i2.TreeTableTogglerComponent, selector: "f-treetabletoggler", inputs: ["rowNode"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
1925
1901
|
}
|
|
1926
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
1902
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RoleActionSelectorComponent, decorators: [{
|
|
1927
1903
|
type: Component,
|
|
1928
|
-
args: [{ selector: 'flusys-role-action-selector', imports: [FormsModule,
|
|
1904
|
+
args: [{ selector: 'flusys-role-action-selector', imports: [FormsModule, UiModule, HasPermissionDirective, TranslatePipe], template: `
|
|
1929
1905
|
<div class="role-action-selector">
|
|
1930
1906
|
<div class="mb-4">
|
|
1931
1907
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
|
@@ -1933,7 +1909,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1933
1909
|
<label class="block font-semibold mb-2">{{
|
|
1934
1910
|
'iam.permission.select.role' | translate
|
|
1935
1911
|
}}</label>
|
|
1936
|
-
<
|
|
1912
|
+
<f-select
|
|
1937
1913
|
[ngModel]="selectedRoleId()"
|
|
1938
1914
|
(ngModelChange)="selectedRoleId.set($event)"
|
|
1939
1915
|
[options]="roles()"
|
|
@@ -1955,7 +1931,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1955
1931
|
<div
|
|
1956
1932
|
class="surface-card p-5 rounded-border shadow-sm flex justify-center"
|
|
1957
1933
|
>
|
|
1958
|
-
<
|
|
1934
|
+
<ui-icon name="loader-circle" spin class="text-primary text-5xl"></ui-icon>
|
|
1959
1935
|
</div>
|
|
1960
1936
|
}
|
|
1961
1937
|
|
|
@@ -1977,36 +1953,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1977
1953
|
</div>
|
|
1978
1954
|
<div class="flex flex-wrap gap-2">
|
|
1979
1955
|
<button
|
|
1980
|
-
|
|
1956
|
+
fButton
|
|
1981
1957
|
[outlined]="true"
|
|
1982
1958
|
size="small"
|
|
1983
1959
|
severity="secondary"
|
|
1984
1960
|
(click)="selectAll()"
|
|
1985
1961
|
>
|
|
1986
|
-
<
|
|
1962
|
+
<ui-icon pButtonIcon name="check"></ui-icon>
|
|
1987
1963
|
<span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
|
|
1988
1964
|
</button>
|
|
1989
1965
|
<button
|
|
1990
|
-
|
|
1966
|
+
fButton
|
|
1991
1967
|
[outlined]="true"
|
|
1992
1968
|
size="small"
|
|
1993
1969
|
severity="secondary"
|
|
1994
1970
|
(click)="deselectAll()"
|
|
1995
1971
|
>
|
|
1996
|
-
<
|
|
1972
|
+
<ui-icon pButtonIcon name="times"></ui-icon>
|
|
1997
1973
|
<span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
|
|
1998
1974
|
</button>
|
|
1999
1975
|
<button
|
|
2000
|
-
|
|
1976
|
+
fButton
|
|
2001
1977
|
*hasPermission="ROLE_ACTION_PERMISSIONS.ASSIGN"
|
|
2002
1978
|
[disabled]="!canSave() || saving()"
|
|
2003
1979
|
size="small"
|
|
2004
1980
|
(click)="saveChanges()"
|
|
2005
1981
|
>
|
|
2006
1982
|
@if (saving()) {
|
|
2007
|
-
<
|
|
1983
|
+
<ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
|
|
2008
1984
|
} @else {
|
|
2009
|
-
<
|
|
1985
|
+
<ui-icon pButtonIcon name="save"></ui-icon>
|
|
2010
1986
|
}
|
|
2011
1987
|
<span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
|
|
2012
1988
|
</button>
|
|
@@ -2016,7 +1992,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2016
1992
|
@if (invalidActionsCount() > 0) {
|
|
2017
1993
|
<div class="validation-warning rounded-border p-3 mb-4">
|
|
2018
1994
|
<div class="flex items-start gap-2">
|
|
2019
|
-
<
|
|
1995
|
+
<ui-icon name="exclamation-triangle" class="text-xl"></ui-icon>
|
|
2020
1996
|
<div class="flex-1">
|
|
2021
1997
|
<span class="font-semibold"
|
|
2022
1998
|
>{{ 'iam.validation.warning.title' | translate }}:</span
|
|
@@ -2035,20 +2011,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2035
2011
|
}
|
|
2036
2012
|
|
|
2037
2013
|
<div class="overflow-x-auto -mx-4 sm:mx-0">
|
|
2038
|
-
<
|
|
2014
|
+
<f-treetable
|
|
2039
2015
|
[value]="treeNodes()"
|
|
2040
2016
|
dataKey="id"
|
|
2041
|
-
class="p-treetable-sm"
|
|
2042
2017
|
[tableStyle]="{ 'min-width': '50rem' }"
|
|
2043
2018
|
>
|
|
2044
2019
|
<ng-template #header>
|
|
2045
2020
|
<tr>
|
|
2046
2021
|
<th class="w-12">
|
|
2047
|
-
<
|
|
2022
|
+
<f-checkbox
|
|
2048
2023
|
[ngModel]="allSelected()"
|
|
2049
2024
|
[binary]="true"
|
|
2050
2025
|
(ngModelChange)="toggleAll()"
|
|
2051
|
-
[
|
|
2026
|
+
[fTooltip]="'shared.select.deselect.all' | translate"
|
|
2052
2027
|
tooltipPosition="top"
|
|
2053
2028
|
/>
|
|
2054
2029
|
</th>
|
|
@@ -2067,27 +2042,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2067
2042
|
@let tooltip = getTooltip(rowData);
|
|
2068
2043
|
<tr [class.highlight-warning]="hasUnmet">
|
|
2069
2044
|
<td class="w-12">
|
|
2070
|
-
<
|
|
2045
|
+
<f-checkbox
|
|
2071
2046
|
[ngModel]="selectionMap()[rowData.id]"
|
|
2072
2047
|
[binary]="true"
|
|
2073
2048
|
(ngModelChange)="onActionToggle(rowData, $event)"
|
|
2074
|
-
[
|
|
2049
|
+
[fTooltip]="tooltip"
|
|
2075
2050
|
tooltipPosition="top"
|
|
2076
2051
|
/>
|
|
2077
2052
|
</td>
|
|
2078
2053
|
<td>
|
|
2079
|
-
<
|
|
2054
|
+
<f-treetabletoggler [rowNode]="rowNode" />
|
|
2080
2055
|
<span class="inline-flex items-center gap-2">
|
|
2081
2056
|
{{ rowData.name }}
|
|
2082
2057
|
@if (hasUnmet) {
|
|
2083
|
-
<
|
|
2084
|
-
class="pi pi-exclamation-triangle text-orange-500"
|
|
2085
|
-
[pTooltip]="
|
|
2058
|
+
<ui-icon name="exclamation-triangle" class="text-orange-500" [fTooltip]="
|
|
2086
2059
|
'iam.validation.unmet.prerequisites.tooltip'
|
|
2087
2060
|
| translate
|
|
2088
2061
|
"
|
|
2089
|
-
tooltipPosition="top"
|
|
2090
|
-
></i>
|
|
2062
|
+
tooltipPosition="top"></ui-icon>
|
|
2091
2063
|
}
|
|
2092
2064
|
</span>
|
|
2093
2065
|
</td>
|
|
@@ -2095,7 +2067,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2095
2067
|
{{ rowData.code || '-' }}
|
|
2096
2068
|
</td>
|
|
2097
2069
|
<td>
|
|
2098
|
-
<
|
|
2070
|
+
<f-tag
|
|
2099
2071
|
[value]="rowData.actionType"
|
|
2100
2072
|
[severity]="
|
|
2101
2073
|
rowData.actionType === 'backend' ? 'info' : 'success'
|
|
@@ -2117,7 +2089,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2117
2089
|
<tr>
|
|
2118
2090
|
<td colspan="5" class="text-center p-4 text-muted-color">
|
|
2119
2091
|
@if (loading()) {
|
|
2120
|
-
<
|
|
2092
|
+
<ui-icon name="loader-circle" spin></ui-icon>
|
|
2121
2093
|
{{ 'shared.loading.actions' | translate }}
|
|
2122
2094
|
} @else {
|
|
2123
2095
|
{{ 'iam.permission.no.actions.available' | translate }}
|
|
@@ -2125,14 +2097,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2125
2097
|
</td>
|
|
2126
2098
|
</tr>
|
|
2127
2099
|
</ng-template>
|
|
2128
|
-
</
|
|
2100
|
+
</f-treetable>
|
|
2129
2101
|
</div>
|
|
2130
2102
|
</div>
|
|
2131
2103
|
|
|
2132
2104
|
@if (hasChanges()) {
|
|
2133
2105
|
<div class="border border-surface rounded-border p-3 mt-4">
|
|
2134
2106
|
<div class="flex items-center gap-2 mb-3">
|
|
2135
|
-
<
|
|
2107
|
+
<ui-icon name="info-circle" class="text-primary"></ui-icon>
|
|
2136
2108
|
<span class="font-bold">{{
|
|
2137
2109
|
'shared.pending.changes' | translate
|
|
2138
2110
|
}}</span>
|
|
@@ -2141,7 +2113,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2141
2113
|
@if (pendingAdd().length > 0) {
|
|
2142
2114
|
<div>
|
|
2143
2115
|
<div class="flex items-center gap-2 mb-2">
|
|
2144
|
-
<
|
|
2116
|
+
<ui-icon name="plus-circle" class="text-green-500"></ui-icon>
|
|
2145
2117
|
<strong class="text-sm"
|
|
2146
2118
|
>{{ 'shared.to.add' | translate }} ({{
|
|
2147
2119
|
pendingAdd().length
|
|
@@ -2158,7 +2130,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2158
2130
|
@if (pendingRemove().length > 0) {
|
|
2159
2131
|
<div>
|
|
2160
2132
|
<div class="flex items-center gap-2 mb-2">
|
|
2161
|
-
<
|
|
2133
|
+
<ui-icon name="minus-circle" class="text-red-500"></ui-icon>
|
|
2162
2134
|
<strong class="text-sm"
|
|
2163
2135
|
>{{ 'shared.to.remove' | translate }} ({{
|
|
2164
2136
|
pendingRemove().length
|
|
@@ -2179,9 +2151,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2179
2151
|
|
|
2180
2152
|
@if (!loading() && actions().length === 0) {
|
|
2181
2153
|
<div class="surface-card p-5 rounded-border shadow-sm text-center">
|
|
2182
|
-
<
|
|
2183
|
-
class="pi pi-info-circle text-muted-color mb-3 block text-5xl"
|
|
2184
|
-
></i>
|
|
2154
|
+
<ui-icon name="info-circle" class="text-muted-color mb-3 block text-5xl"></ui-icon>
|
|
2185
2155
|
<p class="text-muted-color m-0">
|
|
2186
2156
|
{{ 'iam.permission.no.actions.for.role' | translate }}
|
|
2187
2157
|
</p>
|
|
@@ -2189,7 +2159,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2189
2159
|
}
|
|
2190
2160
|
}
|
|
2191
2161
|
</div>
|
|
2192
|
-
`, styles: [":host{display:block}.validation-warning{background-color:var(--
|
|
2162
|
+
`, styles: [":host{display:block}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"] }]
|
|
2193
2163
|
}], ctorParameters: () => [] });
|
|
2194
2164
|
|
|
2195
2165
|
class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
|
|
@@ -2317,11 +2287,11 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
2317
2287
|
this.confirmationService.confirm({
|
|
2318
2288
|
header: this.translate('iam.permission.prerequisite.validation.failed'),
|
|
2319
2289
|
message: `${this.translate('iam.permission.prerequisite.error.message')}\n\n${errorList}\n\n${this.translate('iam.permission.auto.select.prompt')}`,
|
|
2320
|
-
icon: '
|
|
2290
|
+
icon: 'exclamation-triangle',
|
|
2321
2291
|
acceptLabel: this.translate('iam.permission.auto.select.required'),
|
|
2322
2292
|
rejectLabel: this.translate('shared.cancel'),
|
|
2323
|
-
acceptIcon: '
|
|
2324
|
-
rejectIcon: '
|
|
2293
|
+
acceptIcon: 'check',
|
|
2294
|
+
rejectIcon: 'times',
|
|
2325
2295
|
accept: () => {
|
|
2326
2296
|
const selMap = { ...this.selectionMap() };
|
|
2327
2297
|
prerequisiteErrors.forEach((error) => {
|
|
@@ -2346,8 +2316,8 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
2346
2316
|
},
|
|
2347
2317
|
});
|
|
2348
2318
|
}
|
|
2349
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2350
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
2319
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CompanyActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2320
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: CompanyActionSelectorComponent, isStandalone: true, selector: "flusys-company-action-selector", usesInheritance: true, ngImport: i0, template: `
|
|
2351
2321
|
<div class="company-action-selector">
|
|
2352
2322
|
<div class="mb-4">
|
|
2353
2323
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
|
@@ -2355,7 +2325,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
2355
2325
|
<label class="block font-semibold mb-2">{{
|
|
2356
2326
|
'iam.permission.select.company' | translate
|
|
2357
2327
|
}}</label>
|
|
2358
|
-
<
|
|
2328
|
+
<f-select
|
|
2359
2329
|
[ngModel]="selectedCompanyId()"
|
|
2360
2330
|
(ngModelChange)="selectedCompanyId.set($event)"
|
|
2361
2331
|
[options]="companies()"
|
|
@@ -2377,7 +2347,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
2377
2347
|
<div
|
|
2378
2348
|
class="surface-card p-5 rounded-border shadow-sm flex justify-center"
|
|
2379
2349
|
>
|
|
2380
|
-
<
|
|
2350
|
+
<ui-icon name="loader-circle" spin class="text-primary text-5xl"></ui-icon>
|
|
2381
2351
|
</div>
|
|
2382
2352
|
}
|
|
2383
2353
|
|
|
@@ -2399,36 +2369,36 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
2399
2369
|
</div>
|
|
2400
2370
|
<div class="flex flex-wrap gap-2">
|
|
2401
2371
|
<button
|
|
2402
|
-
|
|
2372
|
+
fButton
|
|
2403
2373
|
[outlined]="true"
|
|
2404
2374
|
size="small"
|
|
2405
2375
|
severity="secondary"
|
|
2406
2376
|
(click)="selectAll()"
|
|
2407
2377
|
>
|
|
2408
|
-
<
|
|
2378
|
+
<ui-icon pButtonIcon name="check"></ui-icon>
|
|
2409
2379
|
<span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
|
|
2410
2380
|
</button>
|
|
2411
2381
|
<button
|
|
2412
|
-
|
|
2382
|
+
fButton
|
|
2413
2383
|
[outlined]="true"
|
|
2414
2384
|
size="small"
|
|
2415
2385
|
severity="secondary"
|
|
2416
2386
|
(click)="deselectAll()"
|
|
2417
2387
|
>
|
|
2418
|
-
<
|
|
2388
|
+
<ui-icon pButtonIcon name="times"></ui-icon>
|
|
2419
2389
|
<span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
|
|
2420
2390
|
</button>
|
|
2421
2391
|
<button
|
|
2422
|
-
|
|
2392
|
+
fButton
|
|
2423
2393
|
*hasPermission="COMPANY_ACTION_PERMISSIONS.ASSIGN"
|
|
2424
2394
|
[disabled]="!canSave() || saving()"
|
|
2425
2395
|
size="small"
|
|
2426
2396
|
(click)="saveChanges()"
|
|
2427
2397
|
>
|
|
2428
2398
|
@if (saving()) {
|
|
2429
|
-
<
|
|
2399
|
+
<ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
|
|
2430
2400
|
} @else {
|
|
2431
|
-
<
|
|
2401
|
+
<ui-icon pButtonIcon name="save"></ui-icon>
|
|
2432
2402
|
}
|
|
2433
2403
|
<span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
|
|
2434
2404
|
</button>
|
|
@@ -2438,7 +2408,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
2438
2408
|
@if (invalidActionsCount() > 0) {
|
|
2439
2409
|
<div class="validation-warning rounded-border p-3 mb-4">
|
|
2440
2410
|
<div class="flex items-start gap-2">
|
|
2441
|
-
<
|
|
2411
|
+
<ui-icon name="exclamation-triangle" class="text-xl"></ui-icon>
|
|
2442
2412
|
<div class="flex-1">
|
|
2443
2413
|
<span class="font-semibold"
|
|
2444
2414
|
>{{ 'iam.validation.warning.title' | translate }}:</span
|
|
@@ -2457,20 +2427,19 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
2457
2427
|
}
|
|
2458
2428
|
|
|
2459
2429
|
<div class="overflow-x-auto -mx-4 sm:mx-0">
|
|
2460
|
-
<
|
|
2430
|
+
<f-treetable
|
|
2461
2431
|
[value]="treeNodes()"
|
|
2462
2432
|
dataKey="id"
|
|
2463
|
-
class="p-treetable-sm"
|
|
2464
2433
|
[tableStyle]="{ 'min-width': '50rem' }"
|
|
2465
2434
|
>
|
|
2466
2435
|
<ng-template #header>
|
|
2467
2436
|
<tr>
|
|
2468
2437
|
<th class="w-12">
|
|
2469
|
-
<
|
|
2438
|
+
<f-checkbox
|
|
2470
2439
|
[ngModel]="allSelected()"
|
|
2471
2440
|
[binary]="true"
|
|
2472
2441
|
(ngModelChange)="toggleAll()"
|
|
2473
|
-
[
|
|
2442
|
+
[fTooltip]="'shared.select.deselect.all' | translate"
|
|
2474
2443
|
tooltipPosition="top"
|
|
2475
2444
|
/>
|
|
2476
2445
|
</th>
|
|
@@ -2488,27 +2457,24 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
2488
2457
|
@let hasUnmet = hasUnmetPrerequisites(rowData);
|
|
2489
2458
|
<tr [class.highlight-warning]="hasUnmet">
|
|
2490
2459
|
<td class="w-12">
|
|
2491
|
-
<
|
|
2460
|
+
<f-checkbox
|
|
2492
2461
|
[ngModel]="selectionMap()[rowData.id]"
|
|
2493
2462
|
[binary]="true"
|
|
2494
2463
|
(ngModelChange)="onActionToggle(rowData, $event)"
|
|
2495
|
-
[
|
|
2464
|
+
[fTooltip]="getTooltip(rowData)"
|
|
2496
2465
|
tooltipPosition="top"
|
|
2497
2466
|
/>
|
|
2498
2467
|
</td>
|
|
2499
2468
|
<td>
|
|
2500
|
-
<
|
|
2469
|
+
<f-treetabletoggler [rowNode]="rowNode" />
|
|
2501
2470
|
<span class="inline-flex items-center gap-2">
|
|
2502
2471
|
{{ rowData.name }}
|
|
2503
2472
|
@if (hasUnmet) {
|
|
2504
|
-
<
|
|
2505
|
-
class="pi pi-exclamation-triangle text-orange-500"
|
|
2506
|
-
[pTooltip]="
|
|
2473
|
+
<ui-icon name="exclamation-triangle" class="text-orange-500" [fTooltip]="
|
|
2507
2474
|
'iam.validation.unmet.prerequisites.tooltip'
|
|
2508
2475
|
| translate
|
|
2509
2476
|
"
|
|
2510
|
-
tooltipPosition="top"
|
|
2511
|
-
></i>
|
|
2477
|
+
tooltipPosition="top"></ui-icon>
|
|
2512
2478
|
}
|
|
2513
2479
|
</span>
|
|
2514
2480
|
</td>
|
|
@@ -2516,7 +2482,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
2516
2482
|
{{ rowData.code || '-' }}
|
|
2517
2483
|
</td>
|
|
2518
2484
|
<td>
|
|
2519
|
-
<
|
|
2485
|
+
<f-tag
|
|
2520
2486
|
[value]="rowData.actionType"
|
|
2521
2487
|
[severity]="
|
|
2522
2488
|
rowData.actionType === 'backend' ? 'info' : 'success'
|
|
@@ -2532,7 +2498,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
2532
2498
|
<tr>
|
|
2533
2499
|
<td colspan="5" class="text-center p-4 text-muted-color">
|
|
2534
2500
|
@if (loading()) {
|
|
2535
|
-
<
|
|
2501
|
+
<ui-icon name="loader-circle" spin></ui-icon>
|
|
2536
2502
|
{{ 'shared.loading.actions' | translate }}
|
|
2537
2503
|
} @else {
|
|
2538
2504
|
{{ 'iam.permission.no.actions.available' | translate }}
|
|
@@ -2540,14 +2506,14 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
2540
2506
|
</td>
|
|
2541
2507
|
</tr>
|
|
2542
2508
|
</ng-template>
|
|
2543
|
-
</
|
|
2509
|
+
</f-treetable>
|
|
2544
2510
|
</div>
|
|
2545
2511
|
</div>
|
|
2546
2512
|
|
|
2547
2513
|
@if (hasChanges()) {
|
|
2548
2514
|
<div class="border border-surface rounded-border p-3 mt-4">
|
|
2549
2515
|
<div class="flex items-center gap-2 mb-3">
|
|
2550
|
-
<
|
|
2516
|
+
<ui-icon name="info-circle" class="text-primary"></ui-icon>
|
|
2551
2517
|
<span class="font-bold">{{
|
|
2552
2518
|
'shared.pending.changes' | translate
|
|
2553
2519
|
}}</span>
|
|
@@ -2556,7 +2522,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
2556
2522
|
@if (pendingAdd().length > 0) {
|
|
2557
2523
|
<div>
|
|
2558
2524
|
<div class="flex items-center gap-2 mb-2">
|
|
2559
|
-
<
|
|
2525
|
+
<ui-icon name="plus-circle" class="text-green-500"></ui-icon>
|
|
2560
2526
|
<strong class="text-sm"
|
|
2561
2527
|
>{{ 'shared.to.whitelist' | translate }} ({{
|
|
2562
2528
|
pendingAdd().length
|
|
@@ -2573,7 +2539,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
2573
2539
|
@if (pendingRemove().length > 0) {
|
|
2574
2540
|
<div>
|
|
2575
2541
|
<div class="flex items-center gap-2 mb-2">
|
|
2576
|
-
<
|
|
2542
|
+
<ui-icon name="minus-circle" class="text-red-500"></ui-icon>
|
|
2577
2543
|
<strong class="text-sm"
|
|
2578
2544
|
>{{ 'shared.to.remove' | translate }} ({{
|
|
2579
2545
|
pendingRemove().length
|
|
@@ -2594,9 +2560,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
2594
2560
|
|
|
2595
2561
|
@if (!loading() && actions().length === 0) {
|
|
2596
2562
|
<div class="surface-card p-5 rounded-border shadow-sm text-center">
|
|
2597
|
-
<
|
|
2598
|
-
class="pi pi-info-circle text-muted-color mb-3 block text-5xl"
|
|
2599
|
-
></i>
|
|
2563
|
+
<ui-icon name="info-circle" class="text-muted-color mb-3 block text-5xl"></ui-icon>
|
|
2600
2564
|
<p class="text-muted-color m-0">
|
|
2601
2565
|
{{ 'iam.permission.no.actions.for.company' | translate }}
|
|
2602
2566
|
</p>
|
|
@@ -2604,11 +2568,11 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
2604
2568
|
}
|
|
2605
2569
|
}
|
|
2606
2570
|
</div>
|
|
2607
|
-
`, isInline: true, styles: [":host{display:block}.validation-warning{background-color:var(--
|
|
2571
|
+
`, isInline: true, styles: [":host{display:block}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"], dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "directive", type: i2.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "rounded", "raised", "fluid", "disabled", "loading", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i2.TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color"] }, { kind: "component", type: i2.CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "inputId", "invalid", "indeterminate", "touched", "styleClass", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "component", type: i2.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "showClear", "loading", "inputId", "invalid", "touched", "styleClass", "editable"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur"] }, { kind: "directive", type: i2.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay"] }, { kind: "component", type: i2.TreeTableComponent, selector: "f-treetable", inputs: ["value", "loading", "dataKey", "styleClass", "tableStyle", "scrollable"] }, { kind: "component", type: i2.TreeTableTogglerComponent, selector: "f-treetabletoggler", inputs: ["rowNode"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
2608
2572
|
}
|
|
2609
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2573
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CompanyActionSelectorComponent, decorators: [{
|
|
2610
2574
|
type: Component,
|
|
2611
|
-
args: [{ selector: 'flusys-company-action-selector', imports: [
|
|
2575
|
+
args: [{ selector: 'flusys-company-action-selector', imports: [UiModule, FormsModule, HasPermissionDirective, TranslatePipe], template: `
|
|
2612
2576
|
<div class="company-action-selector">
|
|
2613
2577
|
<div class="mb-4">
|
|
2614
2578
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
|
@@ -2616,7 +2580,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2616
2580
|
<label class="block font-semibold mb-2">{{
|
|
2617
2581
|
'iam.permission.select.company' | translate
|
|
2618
2582
|
}}</label>
|
|
2619
|
-
<
|
|
2583
|
+
<f-select
|
|
2620
2584
|
[ngModel]="selectedCompanyId()"
|
|
2621
2585
|
(ngModelChange)="selectedCompanyId.set($event)"
|
|
2622
2586
|
[options]="companies()"
|
|
@@ -2638,7 +2602,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2638
2602
|
<div
|
|
2639
2603
|
class="surface-card p-5 rounded-border shadow-sm flex justify-center"
|
|
2640
2604
|
>
|
|
2641
|
-
<
|
|
2605
|
+
<ui-icon name="loader-circle" spin class="text-primary text-5xl"></ui-icon>
|
|
2642
2606
|
</div>
|
|
2643
2607
|
}
|
|
2644
2608
|
|
|
@@ -2660,36 +2624,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2660
2624
|
</div>
|
|
2661
2625
|
<div class="flex flex-wrap gap-2">
|
|
2662
2626
|
<button
|
|
2663
|
-
|
|
2627
|
+
fButton
|
|
2664
2628
|
[outlined]="true"
|
|
2665
2629
|
size="small"
|
|
2666
2630
|
severity="secondary"
|
|
2667
2631
|
(click)="selectAll()"
|
|
2668
2632
|
>
|
|
2669
|
-
<
|
|
2633
|
+
<ui-icon pButtonIcon name="check"></ui-icon>
|
|
2670
2634
|
<span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
|
|
2671
2635
|
</button>
|
|
2672
2636
|
<button
|
|
2673
|
-
|
|
2637
|
+
fButton
|
|
2674
2638
|
[outlined]="true"
|
|
2675
2639
|
size="small"
|
|
2676
2640
|
severity="secondary"
|
|
2677
2641
|
(click)="deselectAll()"
|
|
2678
2642
|
>
|
|
2679
|
-
<
|
|
2643
|
+
<ui-icon pButtonIcon name="times"></ui-icon>
|
|
2680
2644
|
<span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
|
|
2681
2645
|
</button>
|
|
2682
2646
|
<button
|
|
2683
|
-
|
|
2647
|
+
fButton
|
|
2684
2648
|
*hasPermission="COMPANY_ACTION_PERMISSIONS.ASSIGN"
|
|
2685
2649
|
[disabled]="!canSave() || saving()"
|
|
2686
2650
|
size="small"
|
|
2687
2651
|
(click)="saveChanges()"
|
|
2688
2652
|
>
|
|
2689
2653
|
@if (saving()) {
|
|
2690
|
-
<
|
|
2654
|
+
<ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
|
|
2691
2655
|
} @else {
|
|
2692
|
-
<
|
|
2656
|
+
<ui-icon pButtonIcon name="save"></ui-icon>
|
|
2693
2657
|
}
|
|
2694
2658
|
<span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
|
|
2695
2659
|
</button>
|
|
@@ -2699,7 +2663,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2699
2663
|
@if (invalidActionsCount() > 0) {
|
|
2700
2664
|
<div class="validation-warning rounded-border p-3 mb-4">
|
|
2701
2665
|
<div class="flex items-start gap-2">
|
|
2702
|
-
<
|
|
2666
|
+
<ui-icon name="exclamation-triangle" class="text-xl"></ui-icon>
|
|
2703
2667
|
<div class="flex-1">
|
|
2704
2668
|
<span class="font-semibold"
|
|
2705
2669
|
>{{ 'iam.validation.warning.title' | translate }}:</span
|
|
@@ -2718,20 +2682,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2718
2682
|
}
|
|
2719
2683
|
|
|
2720
2684
|
<div class="overflow-x-auto -mx-4 sm:mx-0">
|
|
2721
|
-
<
|
|
2685
|
+
<f-treetable
|
|
2722
2686
|
[value]="treeNodes()"
|
|
2723
2687
|
dataKey="id"
|
|
2724
|
-
class="p-treetable-sm"
|
|
2725
2688
|
[tableStyle]="{ 'min-width': '50rem' }"
|
|
2726
2689
|
>
|
|
2727
2690
|
<ng-template #header>
|
|
2728
2691
|
<tr>
|
|
2729
2692
|
<th class="w-12">
|
|
2730
|
-
<
|
|
2693
|
+
<f-checkbox
|
|
2731
2694
|
[ngModel]="allSelected()"
|
|
2732
2695
|
[binary]="true"
|
|
2733
2696
|
(ngModelChange)="toggleAll()"
|
|
2734
|
-
[
|
|
2697
|
+
[fTooltip]="'shared.select.deselect.all' | translate"
|
|
2735
2698
|
tooltipPosition="top"
|
|
2736
2699
|
/>
|
|
2737
2700
|
</th>
|
|
@@ -2749,27 +2712,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2749
2712
|
@let hasUnmet = hasUnmetPrerequisites(rowData);
|
|
2750
2713
|
<tr [class.highlight-warning]="hasUnmet">
|
|
2751
2714
|
<td class="w-12">
|
|
2752
|
-
<
|
|
2715
|
+
<f-checkbox
|
|
2753
2716
|
[ngModel]="selectionMap()[rowData.id]"
|
|
2754
2717
|
[binary]="true"
|
|
2755
2718
|
(ngModelChange)="onActionToggle(rowData, $event)"
|
|
2756
|
-
[
|
|
2719
|
+
[fTooltip]="getTooltip(rowData)"
|
|
2757
2720
|
tooltipPosition="top"
|
|
2758
2721
|
/>
|
|
2759
2722
|
</td>
|
|
2760
2723
|
<td>
|
|
2761
|
-
<
|
|
2724
|
+
<f-treetabletoggler [rowNode]="rowNode" />
|
|
2762
2725
|
<span class="inline-flex items-center gap-2">
|
|
2763
2726
|
{{ rowData.name }}
|
|
2764
2727
|
@if (hasUnmet) {
|
|
2765
|
-
<
|
|
2766
|
-
class="pi pi-exclamation-triangle text-orange-500"
|
|
2767
|
-
[pTooltip]="
|
|
2728
|
+
<ui-icon name="exclamation-triangle" class="text-orange-500" [fTooltip]="
|
|
2768
2729
|
'iam.validation.unmet.prerequisites.tooltip'
|
|
2769
2730
|
| translate
|
|
2770
2731
|
"
|
|
2771
|
-
tooltipPosition="top"
|
|
2772
|
-
></i>
|
|
2732
|
+
tooltipPosition="top"></ui-icon>
|
|
2773
2733
|
}
|
|
2774
2734
|
</span>
|
|
2775
2735
|
</td>
|
|
@@ -2777,7 +2737,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2777
2737
|
{{ rowData.code || '-' }}
|
|
2778
2738
|
</td>
|
|
2779
2739
|
<td>
|
|
2780
|
-
<
|
|
2740
|
+
<f-tag
|
|
2781
2741
|
[value]="rowData.actionType"
|
|
2782
2742
|
[severity]="
|
|
2783
2743
|
rowData.actionType === 'backend' ? 'info' : 'success'
|
|
@@ -2793,7 +2753,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2793
2753
|
<tr>
|
|
2794
2754
|
<td colspan="5" class="text-center p-4 text-muted-color">
|
|
2795
2755
|
@if (loading()) {
|
|
2796
|
-
<
|
|
2756
|
+
<ui-icon name="loader-circle" spin></ui-icon>
|
|
2797
2757
|
{{ 'shared.loading.actions' | translate }}
|
|
2798
2758
|
} @else {
|
|
2799
2759
|
{{ 'iam.permission.no.actions.available' | translate }}
|
|
@@ -2801,14 +2761,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2801
2761
|
</td>
|
|
2802
2762
|
</tr>
|
|
2803
2763
|
</ng-template>
|
|
2804
|
-
</
|
|
2764
|
+
</f-treetable>
|
|
2805
2765
|
</div>
|
|
2806
2766
|
</div>
|
|
2807
2767
|
|
|
2808
2768
|
@if (hasChanges()) {
|
|
2809
2769
|
<div class="border border-surface rounded-border p-3 mt-4">
|
|
2810
2770
|
<div class="flex items-center gap-2 mb-3">
|
|
2811
|
-
<
|
|
2771
|
+
<ui-icon name="info-circle" class="text-primary"></ui-icon>
|
|
2812
2772
|
<span class="font-bold">{{
|
|
2813
2773
|
'shared.pending.changes' | translate
|
|
2814
2774
|
}}</span>
|
|
@@ -2817,7 +2777,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2817
2777
|
@if (pendingAdd().length > 0) {
|
|
2818
2778
|
<div>
|
|
2819
2779
|
<div class="flex items-center gap-2 mb-2">
|
|
2820
|
-
<
|
|
2780
|
+
<ui-icon name="plus-circle" class="text-green-500"></ui-icon>
|
|
2821
2781
|
<strong class="text-sm"
|
|
2822
2782
|
>{{ 'shared.to.whitelist' | translate }} ({{
|
|
2823
2783
|
pendingAdd().length
|
|
@@ -2834,7 +2794,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2834
2794
|
@if (pendingRemove().length > 0) {
|
|
2835
2795
|
<div>
|
|
2836
2796
|
<div class="flex items-center gap-2 mb-2">
|
|
2837
|
-
<
|
|
2797
|
+
<ui-icon name="minus-circle" class="text-red-500"></ui-icon>
|
|
2838
2798
|
<strong class="text-sm"
|
|
2839
2799
|
>{{ 'shared.to.remove' | translate }} ({{
|
|
2840
2800
|
pendingRemove().length
|
|
@@ -2855,9 +2815,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2855
2815
|
|
|
2856
2816
|
@if (!loading() && actions().length === 0) {
|
|
2857
2817
|
<div class="surface-card p-5 rounded-border shadow-sm text-center">
|
|
2858
|
-
<
|
|
2859
|
-
class="pi pi-info-circle text-muted-color mb-3 block text-5xl"
|
|
2860
|
-
></i>
|
|
2818
|
+
<ui-icon name="info-circle" class="text-muted-color mb-3 block text-5xl"></ui-icon>
|
|
2861
2819
|
<p class="text-muted-color m-0">
|
|
2862
2820
|
{{ 'iam.permission.no.actions.for.company' | translate }}
|
|
2863
2821
|
</p>
|
|
@@ -2865,7 +2823,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2865
2823
|
}
|
|
2866
2824
|
}
|
|
2867
2825
|
</div>
|
|
2868
|
-
`, styles: [":host{display:block}.validation-warning{background-color:var(--
|
|
2826
|
+
`, styles: [":host{display:block}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"] }]
|
|
2869
2827
|
}], ctorParameters: () => [] });
|
|
2870
2828
|
|
|
2871
2829
|
/**
|
|
@@ -3185,15 +3143,15 @@ class UserRoleSelectorComponent {
|
|
|
3185
3143
|
this._selectionMap.set({});
|
|
3186
3144
|
this._initialSelection.set({});
|
|
3187
3145
|
}
|
|
3188
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
3189
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
3146
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserRoleSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3147
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: UserRoleSelectorComponent, isStandalone: true, selector: "flusys-user-role-selector", ngImport: i0, template: `
|
|
3190
3148
|
<div class="user-role-selector">
|
|
3191
3149
|
<!-- User and Branch Selectors -->
|
|
3192
3150
|
<div class="surface-card p-4 rounded-border mb-4 shadow-sm">
|
|
3193
3151
|
<div class="grid grid-cols-1 sm:grid-cols-2 gap-5">
|
|
3194
3152
|
<div>
|
|
3195
3153
|
<label class="block font-semibold mb-2">
|
|
3196
|
-
<
|
|
3154
|
+
<ui-icon name="user" class="mr-2 text-primary"></ui-icon>
|
|
3197
3155
|
{{ 'iam.permission.select.user' | translate }}
|
|
3198
3156
|
</label>
|
|
3199
3157
|
<lib-user-select
|
|
@@ -3209,10 +3167,10 @@ class UserRoleSelectorComponent {
|
|
|
3209
3167
|
@if (showBranchSelector()) {
|
|
3210
3168
|
<div>
|
|
3211
3169
|
<label class="block font-semibold mb-2">
|
|
3212
|
-
<
|
|
3170
|
+
<ui-icon name="building" class="mr-2 text-primary"></ui-icon>
|
|
3213
3171
|
{{ 'iam.permission.select.branch' | translate }}
|
|
3214
3172
|
</label>
|
|
3215
|
-
<
|
|
3173
|
+
<f-select
|
|
3216
3174
|
[ngModel]="selectedBranchId()"
|
|
3217
3175
|
(ngModelChange)="selectedBranchId.set($event)"
|
|
3218
3176
|
[options]="filteredBranches()"
|
|
@@ -3228,18 +3186,18 @@ class UserRoleSelectorComponent {
|
|
|
3228
3186
|
<ng-template #selectedItem let-branch>
|
|
3229
3187
|
@if (branch) {
|
|
3230
3188
|
<div class="flex items-center gap-2">
|
|
3231
|
-
<
|
|
3189
|
+
<ui-icon name="building" class="text-primary"></ui-icon>
|
|
3232
3190
|
<span class="font-semibold">{{ branch.name }}</span>
|
|
3233
3191
|
</div>
|
|
3234
3192
|
}
|
|
3235
3193
|
</ng-template>
|
|
3236
3194
|
<ng-template #item let-branch>
|
|
3237
3195
|
<div class="flex items-center gap-2">
|
|
3238
|
-
<
|
|
3196
|
+
<ui-icon name="building" class="text-muted-color"></ui-icon>
|
|
3239
3197
|
<span>{{ branch.name }}</span>
|
|
3240
3198
|
</div>
|
|
3241
3199
|
</ng-template>
|
|
3242
|
-
</
|
|
3200
|
+
</f-select>
|
|
3243
3201
|
<small class="text-muted-color block mt-1">
|
|
3244
3202
|
{{
|
|
3245
3203
|
(filteredBranches().length !== 1
|
|
@@ -3259,7 +3217,7 @@ class UserRoleSelectorComponent {
|
|
|
3259
3217
|
<div
|
|
3260
3218
|
class="surface-card p-5 rounded-border shadow-sm flex justify-center"
|
|
3261
3219
|
>
|
|
3262
|
-
<
|
|
3220
|
+
<ui-icon name="loader-circle" spin class="text-primary text-5xl"></ui-icon>
|
|
3263
3221
|
</div>
|
|
3264
3222
|
}
|
|
3265
3223
|
|
|
@@ -3282,36 +3240,36 @@ class UserRoleSelectorComponent {
|
|
|
3282
3240
|
</div>
|
|
3283
3241
|
<div class="flex flex-wrap gap-2">
|
|
3284
3242
|
<button
|
|
3285
|
-
|
|
3243
|
+
fButton
|
|
3286
3244
|
[outlined]="true"
|
|
3287
3245
|
size="small"
|
|
3288
3246
|
severity="secondary"
|
|
3289
3247
|
(click)="selectAll()"
|
|
3290
3248
|
>
|
|
3291
|
-
<
|
|
3249
|
+
<ui-icon pButtonIcon name="check"></ui-icon>
|
|
3292
3250
|
<span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
|
|
3293
3251
|
</button>
|
|
3294
3252
|
<button
|
|
3295
|
-
|
|
3253
|
+
fButton
|
|
3296
3254
|
[outlined]="true"
|
|
3297
3255
|
size="small"
|
|
3298
3256
|
severity="secondary"
|
|
3299
3257
|
(click)="deselectAll()"
|
|
3300
3258
|
>
|
|
3301
|
-
<
|
|
3259
|
+
<ui-icon pButtonIcon name="times"></ui-icon>
|
|
3302
3260
|
<span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
|
|
3303
3261
|
</button>
|
|
3304
3262
|
<button
|
|
3305
|
-
|
|
3263
|
+
fButton
|
|
3306
3264
|
*hasPermission="USER_ROLE_PERMISSIONS.ASSIGN"
|
|
3307
3265
|
[disabled]="!canSave() || saving()"
|
|
3308
3266
|
size="small"
|
|
3309
3267
|
(click)="saveChanges()"
|
|
3310
3268
|
>
|
|
3311
3269
|
@if (saving()) {
|
|
3312
|
-
<
|
|
3270
|
+
<ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
|
|
3313
3271
|
} @else {
|
|
3314
|
-
<
|
|
3272
|
+
<ui-icon pButtonIcon name="save"></ui-icon>
|
|
3315
3273
|
}
|
|
3316
3274
|
<span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
|
|
3317
3275
|
</button>
|
|
@@ -3320,7 +3278,7 @@ class UserRoleSelectorComponent {
|
|
|
3320
3278
|
|
|
3321
3279
|
<!-- Role Table -->
|
|
3322
3280
|
<div class="overflow-x-auto -mx-4 sm:mx-0">
|
|
3323
|
-
<
|
|
3281
|
+
<f-table
|
|
3324
3282
|
[value]="roles()"
|
|
3325
3283
|
[rows]="10"
|
|
3326
3284
|
[paginator]="roles().length > 10"
|
|
@@ -3330,17 +3288,16 @@ class UserRoleSelectorComponent {
|
|
|
3330
3288
|
[currentPageReportTemplate]="
|
|
3331
3289
|
'iam.pagination.roles.template' | translate
|
|
3332
3290
|
"
|
|
3333
|
-
styleClass="p-datatable-sm"
|
|
3334
3291
|
[tableStyle]="{ 'min-width': '35rem' }"
|
|
3335
3292
|
>
|
|
3336
3293
|
<ng-template #header>
|
|
3337
3294
|
<tr>
|
|
3338
3295
|
<th style="width: 3rem">
|
|
3339
|
-
<
|
|
3296
|
+
<f-checkbox
|
|
3340
3297
|
[ngModel]="allSelected()"
|
|
3341
3298
|
[binary]="true"
|
|
3342
3299
|
(ngModelChange)="toggleAll()"
|
|
3343
|
-
[
|
|
3300
|
+
[fTooltip]="'shared.select.deselect.all' | translate"
|
|
3344
3301
|
tooltipPosition="top"
|
|
3345
3302
|
/>
|
|
3346
3303
|
</th>
|
|
@@ -3356,11 +3313,11 @@ class UserRoleSelectorComponent {
|
|
|
3356
3313
|
<ng-template #body let-role>
|
|
3357
3314
|
<tr>
|
|
3358
3315
|
<td>
|
|
3359
|
-
<
|
|
3316
|
+
<f-checkbox
|
|
3360
3317
|
[ngModel]="selectionMap()[role.id]"
|
|
3361
3318
|
[binary]="true"
|
|
3362
3319
|
(ngModelChange)="onRoleToggle(role, $event)"
|
|
3363
|
-
[
|
|
3320
|
+
[fTooltip]="getTooltip(role)"
|
|
3364
3321
|
tooltipPosition="top"
|
|
3365
3322
|
/>
|
|
3366
3323
|
</td>
|
|
@@ -3375,7 +3332,7 @@ class UserRoleSelectorComponent {
|
|
|
3375
3332
|
<tr>
|
|
3376
3333
|
<td colspan="4" class="text-center p-4 text-muted-color">
|
|
3377
3334
|
@if (loading()) {
|
|
3378
|
-
<
|
|
3335
|
+
<ui-icon name="loader-circle" spin></ui-icon>
|
|
3379
3336
|
{{ 'shared.loading.roles' | translate }}
|
|
3380
3337
|
} @else {
|
|
3381
3338
|
{{ 'iam.permission.no.roles.available' | translate }}
|
|
@@ -3383,7 +3340,7 @@ class UserRoleSelectorComponent {
|
|
|
3383
3340
|
</td>
|
|
3384
3341
|
</tr>
|
|
3385
3342
|
</ng-template>
|
|
3386
|
-
</
|
|
3343
|
+
</f-table>
|
|
3387
3344
|
</div>
|
|
3388
3345
|
</div>
|
|
3389
3346
|
|
|
@@ -3391,7 +3348,7 @@ class UserRoleSelectorComponent {
|
|
|
3391
3348
|
@if (hasChanges()) {
|
|
3392
3349
|
<div class="border border-surface rounded-border p-3 mt-4">
|
|
3393
3350
|
<div class="flex items-center gap-2 mb-3">
|
|
3394
|
-
<
|
|
3351
|
+
<ui-icon name="info-circle" class="text-primary"></ui-icon>
|
|
3395
3352
|
<span class="font-bold">{{
|
|
3396
3353
|
'shared.pending.changes' | translate
|
|
3397
3354
|
}}</span>
|
|
@@ -3400,7 +3357,7 @@ class UserRoleSelectorComponent {
|
|
|
3400
3357
|
@if (pendingAdd().length > 0) {
|
|
3401
3358
|
<div>
|
|
3402
3359
|
<div class="flex items-center gap-2 mb-2">
|
|
3403
|
-
<
|
|
3360
|
+
<ui-icon name="plus-circle" class="text-green-500"></ui-icon>
|
|
3404
3361
|
<strong class="text-sm"
|
|
3405
3362
|
>{{ 'shared.to.assign' | translate }} ({{
|
|
3406
3363
|
pendingAdd().length
|
|
@@ -3417,7 +3374,7 @@ class UserRoleSelectorComponent {
|
|
|
3417
3374
|
@if (pendingRemove().length > 0) {
|
|
3418
3375
|
<div>
|
|
3419
3376
|
<div class="flex items-center gap-2 mb-2">
|
|
3420
|
-
<
|
|
3377
|
+
<ui-icon name="minus-circle" class="text-red-500"></ui-icon>
|
|
3421
3378
|
<strong class="text-sm"
|
|
3422
3379
|
>{{ 'shared.to.remove' | translate }} ({{
|
|
3423
3380
|
pendingRemove().length
|
|
@@ -3438,9 +3395,7 @@ class UserRoleSelectorComponent {
|
|
|
3438
3395
|
|
|
3439
3396
|
@if (!loading() && roles().length === 0) {
|
|
3440
3397
|
<div class="surface-card p-5 rounded-border shadow-sm text-center">
|
|
3441
|
-
<
|
|
3442
|
-
class="pi pi-info-circle text-muted-color mb-3 block text-5xl"
|
|
3443
|
-
></i>
|
|
3398
|
+
<ui-icon name="info-circle" class="text-muted-color mb-3 block text-5xl"></ui-icon>
|
|
3444
3399
|
<p class="text-muted-color m-0">
|
|
3445
3400
|
{{ 'iam.permission.no.roles.for.user' | translate }}
|
|
3446
3401
|
</p>
|
|
@@ -3448,14 +3403,14 @@ class UserRoleSelectorComponent {
|
|
|
3448
3403
|
}
|
|
3449
3404
|
}
|
|
3450
3405
|
</div>
|
|
3451
|
-
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type:
|
|
3406
|
+
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i2.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "rounded", "raised", "fluid", "disabled", "loading", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i2.CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "inputId", "invalid", "indeterminate", "touched", "styleClass", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "component", type: i2.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "showClear", "loading", "inputId", "invalid", "touched", "styleClass", "editable"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur"] }, { kind: "component", type: i2.TableComponent, selector: "f-table", inputs: ["value", "lazy", "loading", "rows", "totalRecords", "rowHover", "dataKey", "scrollable", "paginator", "first", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "tableStyle", "styleClass", "globalFilterFields", "sortField", "sortOrder"], outputs: ["sortFieldChange", "sortOrderChange", "onLazyLoad", "onSort"] }, { kind: "directive", type: i2.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "component", type: UserSelectComponent, selector: "lib-user-select", inputs: ["showClear", "value"], outputs: ["valueChange", "userSelected"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
3452
3407
|
}
|
|
3453
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
3408
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserRoleSelectorComponent, decorators: [{
|
|
3454
3409
|
type: Component,
|
|
3455
3410
|
args: [{ selector: 'flusys-user-role-selector', imports: [
|
|
3456
3411
|
CommonModule,
|
|
3457
3412
|
FormsModule,
|
|
3458
|
-
|
|
3413
|
+
UiModule,
|
|
3459
3414
|
HasPermissionDirective,
|
|
3460
3415
|
UserSelectComponent,
|
|
3461
3416
|
TranslatePipe,
|
|
@@ -3466,7 +3421,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3466
3421
|
<div class="grid grid-cols-1 sm:grid-cols-2 gap-5">
|
|
3467
3422
|
<div>
|
|
3468
3423
|
<label class="block font-semibold mb-2">
|
|
3469
|
-
<
|
|
3424
|
+
<ui-icon name="user" class="mr-2 text-primary"></ui-icon>
|
|
3470
3425
|
{{ 'iam.permission.select.user' | translate }}
|
|
3471
3426
|
</label>
|
|
3472
3427
|
<lib-user-select
|
|
@@ -3482,10 +3437,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3482
3437
|
@if (showBranchSelector()) {
|
|
3483
3438
|
<div>
|
|
3484
3439
|
<label class="block font-semibold mb-2">
|
|
3485
|
-
<
|
|
3440
|
+
<ui-icon name="building" class="mr-2 text-primary"></ui-icon>
|
|
3486
3441
|
{{ 'iam.permission.select.branch' | translate }}
|
|
3487
3442
|
</label>
|
|
3488
|
-
<
|
|
3443
|
+
<f-select
|
|
3489
3444
|
[ngModel]="selectedBranchId()"
|
|
3490
3445
|
(ngModelChange)="selectedBranchId.set($event)"
|
|
3491
3446
|
[options]="filteredBranches()"
|
|
@@ -3501,18 +3456,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3501
3456
|
<ng-template #selectedItem let-branch>
|
|
3502
3457
|
@if (branch) {
|
|
3503
3458
|
<div class="flex items-center gap-2">
|
|
3504
|
-
<
|
|
3459
|
+
<ui-icon name="building" class="text-primary"></ui-icon>
|
|
3505
3460
|
<span class="font-semibold">{{ branch.name }}</span>
|
|
3506
3461
|
</div>
|
|
3507
3462
|
}
|
|
3508
3463
|
</ng-template>
|
|
3509
3464
|
<ng-template #item let-branch>
|
|
3510
3465
|
<div class="flex items-center gap-2">
|
|
3511
|
-
<
|
|
3466
|
+
<ui-icon name="building" class="text-muted-color"></ui-icon>
|
|
3512
3467
|
<span>{{ branch.name }}</span>
|
|
3513
3468
|
</div>
|
|
3514
3469
|
</ng-template>
|
|
3515
|
-
</
|
|
3470
|
+
</f-select>
|
|
3516
3471
|
<small class="text-muted-color block mt-1">
|
|
3517
3472
|
{{
|
|
3518
3473
|
(filteredBranches().length !== 1
|
|
@@ -3532,7 +3487,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3532
3487
|
<div
|
|
3533
3488
|
class="surface-card p-5 rounded-border shadow-sm flex justify-center"
|
|
3534
3489
|
>
|
|
3535
|
-
<
|
|
3490
|
+
<ui-icon name="loader-circle" spin class="text-primary text-5xl"></ui-icon>
|
|
3536
3491
|
</div>
|
|
3537
3492
|
}
|
|
3538
3493
|
|
|
@@ -3555,36 +3510,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3555
3510
|
</div>
|
|
3556
3511
|
<div class="flex flex-wrap gap-2">
|
|
3557
3512
|
<button
|
|
3558
|
-
|
|
3513
|
+
fButton
|
|
3559
3514
|
[outlined]="true"
|
|
3560
3515
|
size="small"
|
|
3561
3516
|
severity="secondary"
|
|
3562
3517
|
(click)="selectAll()"
|
|
3563
3518
|
>
|
|
3564
|
-
<
|
|
3519
|
+
<ui-icon pButtonIcon name="check"></ui-icon>
|
|
3565
3520
|
<span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
|
|
3566
3521
|
</button>
|
|
3567
3522
|
<button
|
|
3568
|
-
|
|
3523
|
+
fButton
|
|
3569
3524
|
[outlined]="true"
|
|
3570
3525
|
size="small"
|
|
3571
3526
|
severity="secondary"
|
|
3572
3527
|
(click)="deselectAll()"
|
|
3573
3528
|
>
|
|
3574
|
-
<
|
|
3529
|
+
<ui-icon pButtonIcon name="times"></ui-icon>
|
|
3575
3530
|
<span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
|
|
3576
3531
|
</button>
|
|
3577
3532
|
<button
|
|
3578
|
-
|
|
3533
|
+
fButton
|
|
3579
3534
|
*hasPermission="USER_ROLE_PERMISSIONS.ASSIGN"
|
|
3580
3535
|
[disabled]="!canSave() || saving()"
|
|
3581
3536
|
size="small"
|
|
3582
3537
|
(click)="saveChanges()"
|
|
3583
3538
|
>
|
|
3584
3539
|
@if (saving()) {
|
|
3585
|
-
<
|
|
3540
|
+
<ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
|
|
3586
3541
|
} @else {
|
|
3587
|
-
<
|
|
3542
|
+
<ui-icon pButtonIcon name="save"></ui-icon>
|
|
3588
3543
|
}
|
|
3589
3544
|
<span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
|
|
3590
3545
|
</button>
|
|
@@ -3593,7 +3548,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3593
3548
|
|
|
3594
3549
|
<!-- Role Table -->
|
|
3595
3550
|
<div class="overflow-x-auto -mx-4 sm:mx-0">
|
|
3596
|
-
<
|
|
3551
|
+
<f-table
|
|
3597
3552
|
[value]="roles()"
|
|
3598
3553
|
[rows]="10"
|
|
3599
3554
|
[paginator]="roles().length > 10"
|
|
@@ -3603,17 +3558,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3603
3558
|
[currentPageReportTemplate]="
|
|
3604
3559
|
'iam.pagination.roles.template' | translate
|
|
3605
3560
|
"
|
|
3606
|
-
styleClass="p-datatable-sm"
|
|
3607
3561
|
[tableStyle]="{ 'min-width': '35rem' }"
|
|
3608
3562
|
>
|
|
3609
3563
|
<ng-template #header>
|
|
3610
3564
|
<tr>
|
|
3611
3565
|
<th style="width: 3rem">
|
|
3612
|
-
<
|
|
3566
|
+
<f-checkbox
|
|
3613
3567
|
[ngModel]="allSelected()"
|
|
3614
3568
|
[binary]="true"
|
|
3615
3569
|
(ngModelChange)="toggleAll()"
|
|
3616
|
-
[
|
|
3570
|
+
[fTooltip]="'shared.select.deselect.all' | translate"
|
|
3617
3571
|
tooltipPosition="top"
|
|
3618
3572
|
/>
|
|
3619
3573
|
</th>
|
|
@@ -3629,11 +3583,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3629
3583
|
<ng-template #body let-role>
|
|
3630
3584
|
<tr>
|
|
3631
3585
|
<td>
|
|
3632
|
-
<
|
|
3586
|
+
<f-checkbox
|
|
3633
3587
|
[ngModel]="selectionMap()[role.id]"
|
|
3634
3588
|
[binary]="true"
|
|
3635
3589
|
(ngModelChange)="onRoleToggle(role, $event)"
|
|
3636
|
-
[
|
|
3590
|
+
[fTooltip]="getTooltip(role)"
|
|
3637
3591
|
tooltipPosition="top"
|
|
3638
3592
|
/>
|
|
3639
3593
|
</td>
|
|
@@ -3648,7 +3602,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3648
3602
|
<tr>
|
|
3649
3603
|
<td colspan="4" class="text-center p-4 text-muted-color">
|
|
3650
3604
|
@if (loading()) {
|
|
3651
|
-
<
|
|
3605
|
+
<ui-icon name="loader-circle" spin></ui-icon>
|
|
3652
3606
|
{{ 'shared.loading.roles' | translate }}
|
|
3653
3607
|
} @else {
|
|
3654
3608
|
{{ 'iam.permission.no.roles.available' | translate }}
|
|
@@ -3656,7 +3610,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3656
3610
|
</td>
|
|
3657
3611
|
</tr>
|
|
3658
3612
|
</ng-template>
|
|
3659
|
-
</
|
|
3613
|
+
</f-table>
|
|
3660
3614
|
</div>
|
|
3661
3615
|
</div>
|
|
3662
3616
|
|
|
@@ -3664,7 +3618,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3664
3618
|
@if (hasChanges()) {
|
|
3665
3619
|
<div class="border border-surface rounded-border p-3 mt-4">
|
|
3666
3620
|
<div class="flex items-center gap-2 mb-3">
|
|
3667
|
-
<
|
|
3621
|
+
<ui-icon name="info-circle" class="text-primary"></ui-icon>
|
|
3668
3622
|
<span class="font-bold">{{
|
|
3669
3623
|
'shared.pending.changes' | translate
|
|
3670
3624
|
}}</span>
|
|
@@ -3673,7 +3627,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3673
3627
|
@if (pendingAdd().length > 0) {
|
|
3674
3628
|
<div>
|
|
3675
3629
|
<div class="flex items-center gap-2 mb-2">
|
|
3676
|
-
<
|
|
3630
|
+
<ui-icon name="plus-circle" class="text-green-500"></ui-icon>
|
|
3677
3631
|
<strong class="text-sm"
|
|
3678
3632
|
>{{ 'shared.to.assign' | translate }} ({{
|
|
3679
3633
|
pendingAdd().length
|
|
@@ -3690,7 +3644,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3690
3644
|
@if (pendingRemove().length > 0) {
|
|
3691
3645
|
<div>
|
|
3692
3646
|
<div class="flex items-center gap-2 mb-2">
|
|
3693
|
-
<
|
|
3647
|
+
<ui-icon name="minus-circle" class="text-red-500"></ui-icon>
|
|
3694
3648
|
<strong class="text-sm"
|
|
3695
3649
|
>{{ 'shared.to.remove' | translate }} ({{
|
|
3696
3650
|
pendingRemove().length
|
|
@@ -3711,9 +3665,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3711
3665
|
|
|
3712
3666
|
@if (!loading() && roles().length === 0) {
|
|
3713
3667
|
<div class="surface-card p-5 rounded-border shadow-sm text-center">
|
|
3714
|
-
<
|
|
3715
|
-
class="pi pi-info-circle text-muted-color mb-3 block text-5xl"
|
|
3716
|
-
></i>
|
|
3668
|
+
<ui-icon name="info-circle" class="text-muted-color mb-3 block text-5xl"></ui-icon>
|
|
3717
3669
|
<p class="text-muted-color m-0">
|
|
3718
3670
|
{{ 'iam.permission.no.roles.for.user' | translate }}
|
|
3719
3671
|
</p>
|
|
@@ -3867,14 +3819,14 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
3867
3819
|
this.saving.set(false);
|
|
3868
3820
|
}
|
|
3869
3821
|
}
|
|
3870
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
3871
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
3822
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3823
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: UserActionSelectorComponent, isStandalone: true, selector: "flusys-user-action-selector", usesInheritance: true, ngImport: i0, template: `
|
|
3872
3824
|
<div class="user-action-selector">
|
|
3873
3825
|
<div class="surface-card p-4 rounded-border mb-4 shadow-sm">
|
|
3874
3826
|
<div class="grid grid-cols-1 sm:grid-cols-2 gap-5">
|
|
3875
3827
|
<div>
|
|
3876
3828
|
<label class="block font-semibold mb-2">
|
|
3877
|
-
<
|
|
3829
|
+
<ui-icon name="user" class="mr-2 text-primary"></ui-icon>
|
|
3878
3830
|
{{ 'iam.permission.select.user' | translate }}
|
|
3879
3831
|
</label>
|
|
3880
3832
|
<lib-user-select
|
|
@@ -3890,10 +3842,10 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
3890
3842
|
@if (showBranchSelector()) {
|
|
3891
3843
|
<div>
|
|
3892
3844
|
<label class="block font-semibold mb-2">
|
|
3893
|
-
<
|
|
3845
|
+
<ui-icon name="building" class="mr-2 text-primary"></ui-icon>
|
|
3894
3846
|
{{ 'iam.permission.select.branch' | translate }}
|
|
3895
3847
|
</label>
|
|
3896
|
-
<
|
|
3848
|
+
<f-select
|
|
3897
3849
|
[ngModel]="selectedBranchId()"
|
|
3898
3850
|
(ngModelChange)="selectedBranchId.set($event)"
|
|
3899
3851
|
[options]="filteredBranches()"
|
|
@@ -3909,18 +3861,18 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
3909
3861
|
<ng-template #selectedItem let-branch>
|
|
3910
3862
|
@if (branch) {
|
|
3911
3863
|
<div class="flex items-center gap-2">
|
|
3912
|
-
<
|
|
3864
|
+
<ui-icon name="building" class="text-primary"></ui-icon>
|
|
3913
3865
|
<span class="font-semibold">{{ branch.name }}</span>
|
|
3914
3866
|
</div>
|
|
3915
3867
|
}
|
|
3916
3868
|
</ng-template>
|
|
3917
3869
|
<ng-template #item let-branch>
|
|
3918
3870
|
<div class="flex items-center gap-2">
|
|
3919
|
-
<
|
|
3871
|
+
<ui-icon name="building" class="text-muted-color"></ui-icon>
|
|
3920
3872
|
<span>{{ branch.name }}</span>
|
|
3921
3873
|
</div>
|
|
3922
3874
|
</ng-template>
|
|
3923
|
-
</
|
|
3875
|
+
</f-select>
|
|
3924
3876
|
<small class="text-muted-color block mt-1">
|
|
3925
3877
|
{{
|
|
3926
3878
|
(filteredBranches().length !== 1
|
|
@@ -3937,7 +3889,7 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
3937
3889
|
@if (selectedUserId()) {
|
|
3938
3890
|
@if (loading()) {
|
|
3939
3891
|
<div class="flex justify-center p-5">
|
|
3940
|
-
<
|
|
3892
|
+
<ui-icon name="loader-circle" spin class="text-4xl"></ui-icon>
|
|
3941
3893
|
</div>
|
|
3942
3894
|
}
|
|
3943
3895
|
|
|
@@ -3959,36 +3911,36 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
3959
3911
|
</div>
|
|
3960
3912
|
<div class="flex flex-wrap gap-2">
|
|
3961
3913
|
<button
|
|
3962
|
-
|
|
3914
|
+
fButton
|
|
3963
3915
|
[outlined]="true"
|
|
3964
3916
|
size="small"
|
|
3965
3917
|
severity="secondary"
|
|
3966
3918
|
(click)="selectAll()"
|
|
3967
3919
|
>
|
|
3968
|
-
<
|
|
3920
|
+
<ui-icon pButtonIcon name="check"></ui-icon>
|
|
3969
3921
|
<span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
|
|
3970
3922
|
</button>
|
|
3971
3923
|
<button
|
|
3972
|
-
|
|
3924
|
+
fButton
|
|
3973
3925
|
[outlined]="true"
|
|
3974
3926
|
size="small"
|
|
3975
3927
|
severity="secondary"
|
|
3976
3928
|
(click)="deselectAll()"
|
|
3977
3929
|
>
|
|
3978
|
-
<
|
|
3930
|
+
<ui-icon pButtonIcon name="times"></ui-icon>
|
|
3979
3931
|
<span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
|
|
3980
3932
|
</button>
|
|
3981
3933
|
<button
|
|
3982
|
-
|
|
3934
|
+
fButton
|
|
3983
3935
|
*hasPermission="USER_ACTION_PERMISSIONS.ASSIGN"
|
|
3984
3936
|
[disabled]="!canSave() || saving()"
|
|
3985
3937
|
size="small"
|
|
3986
3938
|
(click)="saveChanges()"
|
|
3987
3939
|
>
|
|
3988
3940
|
@if (saving()) {
|
|
3989
|
-
<
|
|
3941
|
+
<ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
|
|
3990
3942
|
} @else {
|
|
3991
|
-
<
|
|
3943
|
+
<ui-icon pButtonIcon name="save"></ui-icon>
|
|
3992
3944
|
}
|
|
3993
3945
|
<span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
|
|
3994
3946
|
</button>
|
|
@@ -3998,7 +3950,7 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
3998
3950
|
@if (invalidActionsCount() > 0) {
|
|
3999
3951
|
<div class="validation-warning rounded-border p-3 mb-4">
|
|
4000
3952
|
<div class="flex items-start gap-2">
|
|
4001
|
-
<
|
|
3953
|
+
<ui-icon name="exclamation-triangle" class="text-xl"></ui-icon>
|
|
4002
3954
|
<div class="flex-1">
|
|
4003
3955
|
<span class="font-semibold"
|
|
4004
3956
|
>{{ 'iam.validation.warning.title' | translate }}:</span
|
|
@@ -4017,20 +3969,19 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
4017
3969
|
}
|
|
4018
3970
|
|
|
4019
3971
|
<div class="overflow-x-auto -mx-4 sm:mx-0">
|
|
4020
|
-
<
|
|
3972
|
+
<f-treetable
|
|
4021
3973
|
[value]="treeNodes()"
|
|
4022
3974
|
dataKey="id"
|
|
4023
|
-
class="p-treetable-sm"
|
|
4024
3975
|
[tableStyle]="{ 'min-width': '50rem' }"
|
|
4025
3976
|
>
|
|
4026
3977
|
<ng-template #header>
|
|
4027
3978
|
<tr>
|
|
4028
3979
|
<th class="w-12">
|
|
4029
|
-
<
|
|
3980
|
+
<f-checkbox
|
|
4030
3981
|
[ngModel]="allSelected()"
|
|
4031
3982
|
[binary]="true"
|
|
4032
3983
|
(ngModelChange)="toggleAll()"
|
|
4033
|
-
[
|
|
3984
|
+
[fTooltip]="'shared.select.deselect.all' | translate"
|
|
4034
3985
|
tooltipPosition="top"
|
|
4035
3986
|
/>
|
|
4036
3987
|
</th>
|
|
@@ -4049,27 +4000,24 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
4049
4000
|
@let tooltip = getTooltip(rowData);
|
|
4050
4001
|
<tr [class.highlight-warning]="hasUnmet">
|
|
4051
4002
|
<td class="w-12">
|
|
4052
|
-
<
|
|
4003
|
+
<f-checkbox
|
|
4053
4004
|
[ngModel]="selectionMap()[rowData.id]"
|
|
4054
4005
|
[binary]="true"
|
|
4055
4006
|
(ngModelChange)="onActionToggle(rowData, $event)"
|
|
4056
|
-
[
|
|
4007
|
+
[fTooltip]="tooltip"
|
|
4057
4008
|
tooltipPosition="top"
|
|
4058
4009
|
/>
|
|
4059
4010
|
</td>
|
|
4060
4011
|
<td>
|
|
4061
|
-
<
|
|
4012
|
+
<f-treetabletoggler [rowNode]="rowNode" />
|
|
4062
4013
|
<span class="inline-flex items-center gap-2">
|
|
4063
4014
|
{{ rowData.name }}
|
|
4064
4015
|
@if (hasUnmet) {
|
|
4065
|
-
<
|
|
4066
|
-
class="pi pi-exclamation-triangle text-orange-500"
|
|
4067
|
-
[pTooltip]="
|
|
4016
|
+
<ui-icon name="exclamation-triangle" class="text-orange-500" [fTooltip]="
|
|
4068
4017
|
'iam.validation.unmet.prerequisites.tooltip'
|
|
4069
4018
|
| translate
|
|
4070
4019
|
"
|
|
4071
|
-
tooltipPosition="top"
|
|
4072
|
-
></i>
|
|
4020
|
+
tooltipPosition="top"></ui-icon>
|
|
4073
4021
|
}
|
|
4074
4022
|
</span>
|
|
4075
4023
|
</td>
|
|
@@ -4077,7 +4025,7 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
4077
4025
|
{{ rowData.code || '-' }}
|
|
4078
4026
|
</td>
|
|
4079
4027
|
<td>
|
|
4080
|
-
<
|
|
4028
|
+
<f-tag
|
|
4081
4029
|
[value]="rowData.actionType"
|
|
4082
4030
|
[severity]="
|
|
4083
4031
|
rowData.actionType === 'backend' ? 'info' : 'success'
|
|
@@ -4093,7 +4041,7 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
4093
4041
|
<tr>
|
|
4094
4042
|
<td colspan="5" class="text-center p-4 text-muted-color">
|
|
4095
4043
|
@if (loading()) {
|
|
4096
|
-
<
|
|
4044
|
+
<ui-icon name="loader-circle" spin></ui-icon>
|
|
4097
4045
|
{{ 'shared.loading.actions' | translate }}
|
|
4098
4046
|
} @else {
|
|
4099
4047
|
{{ 'iam.permission.no.actions.available' | translate }}
|
|
@@ -4101,14 +4049,14 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
4101
4049
|
</td>
|
|
4102
4050
|
</tr>
|
|
4103
4051
|
</ng-template>
|
|
4104
|
-
</
|
|
4052
|
+
</f-treetable>
|
|
4105
4053
|
</div>
|
|
4106
4054
|
</div>
|
|
4107
4055
|
|
|
4108
4056
|
@if (hasChanges()) {
|
|
4109
4057
|
<div class="border border-surface rounded-border p-3 mt-4">
|
|
4110
4058
|
<div class="flex items-center gap-2 mb-3">
|
|
4111
|
-
<
|
|
4059
|
+
<ui-icon name="info-circle" class="text-primary"></ui-icon>
|
|
4112
4060
|
<span class="font-bold">{{
|
|
4113
4061
|
'shared.pending.changes' | translate
|
|
4114
4062
|
}}</span>
|
|
@@ -4117,7 +4065,7 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
4117
4065
|
@if (pendingAdd().length > 0) {
|
|
4118
4066
|
<div>
|
|
4119
4067
|
<div class="flex items-center gap-2 mb-2">
|
|
4120
|
-
<
|
|
4068
|
+
<ui-icon name="plus-circle" class="text-green-500"></ui-icon>
|
|
4121
4069
|
<strong class="text-sm"
|
|
4122
4070
|
>{{ 'shared.to.assign' | translate }} ({{
|
|
4123
4071
|
pendingAdd().length
|
|
@@ -4134,7 +4082,7 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
4134
4082
|
@if (pendingRemove().length > 0) {
|
|
4135
4083
|
<div>
|
|
4136
4084
|
<div class="flex items-center gap-2 mb-2">
|
|
4137
|
-
<
|
|
4085
|
+
<ui-icon name="minus-circle" class="text-red-500"></ui-icon>
|
|
4138
4086
|
<strong class="text-sm"
|
|
4139
4087
|
>{{ 'shared.to.remove' | translate }} ({{
|
|
4140
4088
|
pendingRemove().length
|
|
@@ -4155,9 +4103,7 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
4155
4103
|
|
|
4156
4104
|
@if (!loading() && actions().length === 0) {
|
|
4157
4105
|
<div class="surface-card p-5 rounded-border shadow-sm text-center">
|
|
4158
|
-
<
|
|
4159
|
-
class="pi pi-info-circle text-muted-color mb-3 block text-5xl"
|
|
4160
|
-
></i>
|
|
4106
|
+
<ui-icon name="info-circle" class="text-muted-color mb-3 block text-5xl"></ui-icon>
|
|
4161
4107
|
<p class="text-muted-color m-0">
|
|
4162
4108
|
{{ 'iam.permission.no.actions.for.user' | translate }}
|
|
4163
4109
|
</p>
|
|
@@ -4165,13 +4111,13 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
|
|
|
4165
4111
|
}
|
|
4166
4112
|
}
|
|
4167
4113
|
</div>
|
|
4168
|
-
`, isInline: true, styles: [":host{display:block}.validation-warning{background-color:var(--
|
|
4114
|
+
`, isInline: true, styles: [":host{display:block}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i2.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "rounded", "raised", "fluid", "disabled", "loading", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i2.TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color"] }, { kind: "component", type: i2.CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "inputId", "invalid", "indeterminate", "touched", "styleClass", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "component", type: i2.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "showClear", "loading", "inputId", "invalid", "touched", "styleClass", "editable"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur"] }, { kind: "directive", type: i2.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay"] }, { kind: "component", type: i2.TreeTableComponent, selector: "f-treetable", inputs: ["value", "loading", "dataKey", "styleClass", "tableStyle", "scrollable"] }, { kind: "component", type: i2.TreeTableTogglerComponent, selector: "f-treetabletoggler", inputs: ["rowNode"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "component", type: UserSelectComponent, selector: "lib-user-select", inputs: ["showClear", "value"], outputs: ["valueChange", "userSelected"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
4169
4115
|
}
|
|
4170
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
4116
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserActionSelectorComponent, decorators: [{
|
|
4171
4117
|
type: Component,
|
|
4172
4118
|
args: [{ selector: 'flusys-user-action-selector', imports: [
|
|
4173
4119
|
FormsModule,
|
|
4174
|
-
|
|
4120
|
+
UiModule,
|
|
4175
4121
|
HasPermissionDirective,
|
|
4176
4122
|
UserSelectComponent,
|
|
4177
4123
|
TranslatePipe,
|
|
@@ -4181,7 +4127,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4181
4127
|
<div class="grid grid-cols-1 sm:grid-cols-2 gap-5">
|
|
4182
4128
|
<div>
|
|
4183
4129
|
<label class="block font-semibold mb-2">
|
|
4184
|
-
<
|
|
4130
|
+
<ui-icon name="user" class="mr-2 text-primary"></ui-icon>
|
|
4185
4131
|
{{ 'iam.permission.select.user' | translate }}
|
|
4186
4132
|
</label>
|
|
4187
4133
|
<lib-user-select
|
|
@@ -4197,10 +4143,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4197
4143
|
@if (showBranchSelector()) {
|
|
4198
4144
|
<div>
|
|
4199
4145
|
<label class="block font-semibold mb-2">
|
|
4200
|
-
<
|
|
4146
|
+
<ui-icon name="building" class="mr-2 text-primary"></ui-icon>
|
|
4201
4147
|
{{ 'iam.permission.select.branch' | translate }}
|
|
4202
4148
|
</label>
|
|
4203
|
-
<
|
|
4149
|
+
<f-select
|
|
4204
4150
|
[ngModel]="selectedBranchId()"
|
|
4205
4151
|
(ngModelChange)="selectedBranchId.set($event)"
|
|
4206
4152
|
[options]="filteredBranches()"
|
|
@@ -4216,18 +4162,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4216
4162
|
<ng-template #selectedItem let-branch>
|
|
4217
4163
|
@if (branch) {
|
|
4218
4164
|
<div class="flex items-center gap-2">
|
|
4219
|
-
<
|
|
4165
|
+
<ui-icon name="building" class="text-primary"></ui-icon>
|
|
4220
4166
|
<span class="font-semibold">{{ branch.name }}</span>
|
|
4221
4167
|
</div>
|
|
4222
4168
|
}
|
|
4223
4169
|
</ng-template>
|
|
4224
4170
|
<ng-template #item let-branch>
|
|
4225
4171
|
<div class="flex items-center gap-2">
|
|
4226
|
-
<
|
|
4172
|
+
<ui-icon name="building" class="text-muted-color"></ui-icon>
|
|
4227
4173
|
<span>{{ branch.name }}</span>
|
|
4228
4174
|
</div>
|
|
4229
4175
|
</ng-template>
|
|
4230
|
-
</
|
|
4176
|
+
</f-select>
|
|
4231
4177
|
<small class="text-muted-color block mt-1">
|
|
4232
4178
|
{{
|
|
4233
4179
|
(filteredBranches().length !== 1
|
|
@@ -4244,7 +4190,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4244
4190
|
@if (selectedUserId()) {
|
|
4245
4191
|
@if (loading()) {
|
|
4246
4192
|
<div class="flex justify-center p-5">
|
|
4247
|
-
<
|
|
4193
|
+
<ui-icon name="loader-circle" spin class="text-4xl"></ui-icon>
|
|
4248
4194
|
</div>
|
|
4249
4195
|
}
|
|
4250
4196
|
|
|
@@ -4266,36 +4212,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4266
4212
|
</div>
|
|
4267
4213
|
<div class="flex flex-wrap gap-2">
|
|
4268
4214
|
<button
|
|
4269
|
-
|
|
4215
|
+
fButton
|
|
4270
4216
|
[outlined]="true"
|
|
4271
4217
|
size="small"
|
|
4272
4218
|
severity="secondary"
|
|
4273
4219
|
(click)="selectAll()"
|
|
4274
4220
|
>
|
|
4275
|
-
<
|
|
4221
|
+
<ui-icon pButtonIcon name="check"></ui-icon>
|
|
4276
4222
|
<span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
|
|
4277
4223
|
</button>
|
|
4278
4224
|
<button
|
|
4279
|
-
|
|
4225
|
+
fButton
|
|
4280
4226
|
[outlined]="true"
|
|
4281
4227
|
size="small"
|
|
4282
4228
|
severity="secondary"
|
|
4283
4229
|
(click)="deselectAll()"
|
|
4284
4230
|
>
|
|
4285
|
-
<
|
|
4231
|
+
<ui-icon pButtonIcon name="times"></ui-icon>
|
|
4286
4232
|
<span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
|
|
4287
4233
|
</button>
|
|
4288
4234
|
<button
|
|
4289
|
-
|
|
4235
|
+
fButton
|
|
4290
4236
|
*hasPermission="USER_ACTION_PERMISSIONS.ASSIGN"
|
|
4291
4237
|
[disabled]="!canSave() || saving()"
|
|
4292
4238
|
size="small"
|
|
4293
4239
|
(click)="saveChanges()"
|
|
4294
4240
|
>
|
|
4295
4241
|
@if (saving()) {
|
|
4296
|
-
<
|
|
4242
|
+
<ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
|
|
4297
4243
|
} @else {
|
|
4298
|
-
<
|
|
4244
|
+
<ui-icon pButtonIcon name="save"></ui-icon>
|
|
4299
4245
|
}
|
|
4300
4246
|
<span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
|
|
4301
4247
|
</button>
|
|
@@ -4305,7 +4251,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4305
4251
|
@if (invalidActionsCount() > 0) {
|
|
4306
4252
|
<div class="validation-warning rounded-border p-3 mb-4">
|
|
4307
4253
|
<div class="flex items-start gap-2">
|
|
4308
|
-
<
|
|
4254
|
+
<ui-icon name="exclamation-triangle" class="text-xl"></ui-icon>
|
|
4309
4255
|
<div class="flex-1">
|
|
4310
4256
|
<span class="font-semibold"
|
|
4311
4257
|
>{{ 'iam.validation.warning.title' | translate }}:</span
|
|
@@ -4324,20 +4270,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4324
4270
|
}
|
|
4325
4271
|
|
|
4326
4272
|
<div class="overflow-x-auto -mx-4 sm:mx-0">
|
|
4327
|
-
<
|
|
4273
|
+
<f-treetable
|
|
4328
4274
|
[value]="treeNodes()"
|
|
4329
4275
|
dataKey="id"
|
|
4330
|
-
class="p-treetable-sm"
|
|
4331
4276
|
[tableStyle]="{ 'min-width': '50rem' }"
|
|
4332
4277
|
>
|
|
4333
4278
|
<ng-template #header>
|
|
4334
4279
|
<tr>
|
|
4335
4280
|
<th class="w-12">
|
|
4336
|
-
<
|
|
4281
|
+
<f-checkbox
|
|
4337
4282
|
[ngModel]="allSelected()"
|
|
4338
4283
|
[binary]="true"
|
|
4339
4284
|
(ngModelChange)="toggleAll()"
|
|
4340
|
-
[
|
|
4285
|
+
[fTooltip]="'shared.select.deselect.all' | translate"
|
|
4341
4286
|
tooltipPosition="top"
|
|
4342
4287
|
/>
|
|
4343
4288
|
</th>
|
|
@@ -4356,27 +4301,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4356
4301
|
@let tooltip = getTooltip(rowData);
|
|
4357
4302
|
<tr [class.highlight-warning]="hasUnmet">
|
|
4358
4303
|
<td class="w-12">
|
|
4359
|
-
<
|
|
4304
|
+
<f-checkbox
|
|
4360
4305
|
[ngModel]="selectionMap()[rowData.id]"
|
|
4361
4306
|
[binary]="true"
|
|
4362
4307
|
(ngModelChange)="onActionToggle(rowData, $event)"
|
|
4363
|
-
[
|
|
4308
|
+
[fTooltip]="tooltip"
|
|
4364
4309
|
tooltipPosition="top"
|
|
4365
4310
|
/>
|
|
4366
4311
|
</td>
|
|
4367
4312
|
<td>
|
|
4368
|
-
<
|
|
4313
|
+
<f-treetabletoggler [rowNode]="rowNode" />
|
|
4369
4314
|
<span class="inline-flex items-center gap-2">
|
|
4370
4315
|
{{ rowData.name }}
|
|
4371
4316
|
@if (hasUnmet) {
|
|
4372
|
-
<
|
|
4373
|
-
class="pi pi-exclamation-triangle text-orange-500"
|
|
4374
|
-
[pTooltip]="
|
|
4317
|
+
<ui-icon name="exclamation-triangle" class="text-orange-500" [fTooltip]="
|
|
4375
4318
|
'iam.validation.unmet.prerequisites.tooltip'
|
|
4376
4319
|
| translate
|
|
4377
4320
|
"
|
|
4378
|
-
tooltipPosition="top"
|
|
4379
|
-
></i>
|
|
4321
|
+
tooltipPosition="top"></ui-icon>
|
|
4380
4322
|
}
|
|
4381
4323
|
</span>
|
|
4382
4324
|
</td>
|
|
@@ -4384,7 +4326,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4384
4326
|
{{ rowData.code || '-' }}
|
|
4385
4327
|
</td>
|
|
4386
4328
|
<td>
|
|
4387
|
-
<
|
|
4329
|
+
<f-tag
|
|
4388
4330
|
[value]="rowData.actionType"
|
|
4389
4331
|
[severity]="
|
|
4390
4332
|
rowData.actionType === 'backend' ? 'info' : 'success'
|
|
@@ -4400,7 +4342,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4400
4342
|
<tr>
|
|
4401
4343
|
<td colspan="5" class="text-center p-4 text-muted-color">
|
|
4402
4344
|
@if (loading()) {
|
|
4403
|
-
<
|
|
4345
|
+
<ui-icon name="loader-circle" spin></ui-icon>
|
|
4404
4346
|
{{ 'shared.loading.actions' | translate }}
|
|
4405
4347
|
} @else {
|
|
4406
4348
|
{{ 'iam.permission.no.actions.available' | translate }}
|
|
@@ -4408,14 +4350,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4408
4350
|
</td>
|
|
4409
4351
|
</tr>
|
|
4410
4352
|
</ng-template>
|
|
4411
|
-
</
|
|
4353
|
+
</f-treetable>
|
|
4412
4354
|
</div>
|
|
4413
4355
|
</div>
|
|
4414
4356
|
|
|
4415
4357
|
@if (hasChanges()) {
|
|
4416
4358
|
<div class="border border-surface rounded-border p-3 mt-4">
|
|
4417
4359
|
<div class="flex items-center gap-2 mb-3">
|
|
4418
|
-
<
|
|
4360
|
+
<ui-icon name="info-circle" class="text-primary"></ui-icon>
|
|
4419
4361
|
<span class="font-bold">{{
|
|
4420
4362
|
'shared.pending.changes' | translate
|
|
4421
4363
|
}}</span>
|
|
@@ -4424,7 +4366,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4424
4366
|
@if (pendingAdd().length > 0) {
|
|
4425
4367
|
<div>
|
|
4426
4368
|
<div class="flex items-center gap-2 mb-2">
|
|
4427
|
-
<
|
|
4369
|
+
<ui-icon name="plus-circle" class="text-green-500"></ui-icon>
|
|
4428
4370
|
<strong class="text-sm"
|
|
4429
4371
|
>{{ 'shared.to.assign' | translate }} ({{
|
|
4430
4372
|
pendingAdd().length
|
|
@@ -4441,7 +4383,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4441
4383
|
@if (pendingRemove().length > 0) {
|
|
4442
4384
|
<div>
|
|
4443
4385
|
<div class="flex items-center gap-2 mb-2">
|
|
4444
|
-
<
|
|
4386
|
+
<ui-icon name="minus-circle" class="text-red-500"></ui-icon>
|
|
4445
4387
|
<strong class="text-sm"
|
|
4446
4388
|
>{{ 'shared.to.remove' | translate }} ({{
|
|
4447
4389
|
pendingRemove().length
|
|
@@ -4462,9 +4404,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4462
4404
|
|
|
4463
4405
|
@if (!loading() && actions().length === 0) {
|
|
4464
4406
|
<div class="surface-card p-5 rounded-border shadow-sm text-center">
|
|
4465
|
-
<
|
|
4466
|
-
class="pi pi-info-circle text-muted-color mb-3 block text-5xl"
|
|
4467
|
-
></i>
|
|
4407
|
+
<ui-icon name="info-circle" class="text-muted-color mb-3 block text-5xl"></ui-icon>
|
|
4468
4408
|
<p class="text-muted-color m-0">
|
|
4469
4409
|
{{ 'iam.permission.no.actions.for.user' | translate }}
|
|
4470
4410
|
</p>
|
|
@@ -4472,7 +4412,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4472
4412
|
}
|
|
4473
4413
|
}
|
|
4474
4414
|
</div>
|
|
4475
|
-
`, styles: [":host{display:block}.validation-warning{background-color:var(--
|
|
4415
|
+
`, styles: [":host{display:block}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"] }]
|
|
4476
4416
|
}], ctorParameters: () => [] });
|
|
4477
4417
|
|
|
4478
4418
|
// Logic Builder Component
|
|
@@ -4522,10 +4462,10 @@ class ProfilePermissionProviderAdapter {
|
|
|
4522
4462
|
})),
|
|
4523
4463
|
})));
|
|
4524
4464
|
}
|
|
4525
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
4526
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
4465
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ProfilePermissionProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
4466
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ProfilePermissionProviderAdapter });
|
|
4527
4467
|
}
|
|
4528
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
4468
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ProfilePermissionProviderAdapter, decorators: [{
|
|
4529
4469
|
type: Injectable
|
|
4530
4470
|
}] });
|
|
4531
4471
|
|
|
@@ -4548,7 +4488,7 @@ const IAM_ROUTES = [
|
|
|
4548
4488
|
{
|
|
4549
4489
|
path: '',
|
|
4550
4490
|
resolve: { translations: resolveTranslationModule({ modules: ['iam'], fallbackMessages: { ...IAM_MESSAGES, ...SHARED_MESSAGES } }) },
|
|
4551
|
-
loadComponent: () => import('./flusys-ng-iam-iam-container.component-
|
|
4491
|
+
loadComponent: () => import('./flusys-ng-iam-iam-container.component-D0m8u6nu.mjs').then((m) => m.IamContainerComponent),
|
|
4552
4492
|
children: [
|
|
4553
4493
|
// Actions Management
|
|
4554
4494
|
{
|
|
@@ -4557,15 +4497,15 @@ const IAM_ROUTES = [
|
|
|
4557
4497
|
children: [
|
|
4558
4498
|
{
|
|
4559
4499
|
path: '',
|
|
4560
|
-
loadComponent: () => import('./flusys-ng-iam-action-list-page.component-
|
|
4500
|
+
loadComponent: () => import('./flusys-ng-iam-action-list-page.component-B1hUE4lD.mjs').then((m) => m.ActionListPageComponent),
|
|
4561
4501
|
},
|
|
4562
4502
|
{
|
|
4563
4503
|
path: 'new',
|
|
4564
|
-
loadComponent: () => import('./flusys-ng-iam-action-form-page.component-
|
|
4504
|
+
loadComponent: () => import('./flusys-ng-iam-action-form-page.component-DTJT8Dc-.mjs').then((m) => m.ActionFormPageComponent),
|
|
4565
4505
|
},
|
|
4566
4506
|
{
|
|
4567
4507
|
path: ':id',
|
|
4568
|
-
loadComponent: () => import('./flusys-ng-iam-action-form-page.component-
|
|
4508
|
+
loadComponent: () => import('./flusys-ng-iam-action-form-page.component-DTJT8Dc-.mjs').then((m) => m.ActionFormPageComponent),
|
|
4569
4509
|
},
|
|
4570
4510
|
],
|
|
4571
4511
|
},
|
|
@@ -4576,15 +4516,15 @@ const IAM_ROUTES = [
|
|
|
4576
4516
|
children: [
|
|
4577
4517
|
{
|
|
4578
4518
|
path: '',
|
|
4579
|
-
loadComponent: () => import('./flusys-ng-iam-role-list-page.component-
|
|
4519
|
+
loadComponent: () => import('./flusys-ng-iam-role-list-page.component-BcS9_ysT.mjs').then((m) => m.RoleListPageComponent),
|
|
4580
4520
|
},
|
|
4581
4521
|
{
|
|
4582
4522
|
path: 'new',
|
|
4583
|
-
loadComponent: () => import('./flusys-ng-iam-role-form-page.component-
|
|
4523
|
+
loadComponent: () => import('./flusys-ng-iam-role-form-page.component-DrUQ0taO.mjs').then((m) => m.RoleFormPageComponent),
|
|
4584
4524
|
},
|
|
4585
4525
|
{
|
|
4586
4526
|
path: ':id',
|
|
4587
|
-
loadComponent: () => import('./flusys-ng-iam-role-form-page.component-
|
|
4527
|
+
loadComponent: () => import('./flusys-ng-iam-role-form-page.component-DrUQ0taO.mjs').then((m) => m.RoleFormPageComponent),
|
|
4588
4528
|
},
|
|
4589
4529
|
],
|
|
4590
4530
|
},
|
|
@@ -4599,7 +4539,7 @@ const IAM_ROUTES = [
|
|
|
4599
4539
|
COMPANY_ACTION_PERMISSIONS.READ,
|
|
4600
4540
|
]),
|
|
4601
4541
|
],
|
|
4602
|
-
loadComponent: () => import('./flusys-ng-iam-permission-page.component-
|
|
4542
|
+
loadComponent: () => import('./flusys-ng-iam-permission-page.component-rcijgKmE.mjs').then((m) => m.PermissionPageComponent),
|
|
4603
4543
|
},
|
|
4604
4544
|
// Default redirect to actions
|
|
4605
4545
|
{
|
|
@@ -4618,4 +4558,4 @@ const IAM_ROUTES = [
|
|
|
4618
4558
|
*/
|
|
4619
4559
|
|
|
4620
4560
|
export { ActionApiService as A, CompanyActionSelectorComponent as C, IAM_MESSAGES as I, LogicBuilderComponent as L, MAX_DROPDOWN_ITEMS as M, PermissionApiService as P, RoleApiService as R, UserRoleSelectorComponent as U, ActionType as a, RoleActionSelectorComponent as b, convertActionToTreeNode as c, UserActionSelectorComponent as d, ActionPermissionLogicService as e, IAM_ROUTES as f, MyPermissionsApiService as g, PermissionStateService as h, ProfilePermissionProviderAdapter as i, provideIamProviders as p };
|
|
4621
|
-
//# sourceMappingURL=flusys-ng-iam-flusys-ng-iam-
|
|
4561
|
+
//# sourceMappingURL=flusys-ng-iam-flusys-ng-iam-DzIO0zsO.mjs.map
|