@flusys/ng-iam 9.2.1 → 9.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{flusys-ng-iam-action-form-page.component-DJ-A1gc2.mjs → flusys-ng-iam-action-form-page.component-2RTxGQ_I.mjs} +5 -5
- package/fesm2022/{flusys-ng-iam-action-form-page.component-DJ-A1gc2.mjs.map → flusys-ng-iam-action-form-page.component-2RTxGQ_I.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-iam-action-list-page.component-D4jAQRwR.mjs → flusys-ng-iam-action-list-page.component-Dpwes7Ga.mjs} +5 -5
- package/fesm2022/{flusys-ng-iam-action-list-page.component-D4jAQRwR.mjs.map → flusys-ng-iam-action-list-page.component-Dpwes7Ga.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-iam-iam-container.component-CIdxVCSW.mjs → flusys-ng-iam-iam-container.component-YqWVaOei.mjs} +4 -4
- package/fesm2022/{flusys-ng-iam-iam-container.component-CIdxVCSW.mjs.map → flusys-ng-iam-iam-container.component-YqWVaOei.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-iam-permission-api.service-C7-Yxvz8.mjs → flusys-ng-iam-permission-api.service-C03CJTGi.mjs} +4 -4
- package/fesm2022/{flusys-ng-iam-permission-api.service-C7-Yxvz8.mjs.map → flusys-ng-iam-permission-api.service-C03CJTGi.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-iam-permission-page.component-DBRetWGs.mjs → flusys-ng-iam-permission-page.component-CJMY1qx0.mjs} +5 -5
- package/fesm2022/{flusys-ng-iam-permission-page.component-DBRetWGs.mjs.map → flusys-ng-iam-permission-page.component-CJMY1qx0.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-iam-role-api.service-OwPgmSFc.mjs → flusys-ng-iam-role-api.service-COWbPura.mjs} +4 -4
- package/fesm2022/{flusys-ng-iam-role-api.service-OwPgmSFc.mjs.map → flusys-ng-iam-role-api.service-COWbPura.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-iam-role-form-page.component-DnkWkbTF.mjs → flusys-ng-iam-role-form-page.component-Crdceypx.mjs} +5 -5
- package/fesm2022/{flusys-ng-iam-role-form-page.component-DnkWkbTF.mjs.map → flusys-ng-iam-role-form-page.component-Crdceypx.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-iam-role-list-page.component-Dhd0AtOg.mjs → flusys-ng-iam-role-list-page.component-DfXkkMES.mjs} +5 -5
- package/fesm2022/{flusys-ng-iam-role-list-page.component-Dhd0AtOg.mjs.map → flusys-ng-iam-role-list-page.component-DfXkkMES.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-iam-tree-utils-B1pBG4At.mjs → flusys-ng-iam-tree-utils-CRflRjIJ.mjs} +4 -4
- package/fesm2022/{flusys-ng-iam-tree-utils-B1pBG4At.mjs.map → flusys-ng-iam-tree-utils-CRflRjIJ.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-iam-user-action-selector.component-2wdl9Ci6.mjs → flusys-ng-iam-user-action-selector.component-BwZD9-jV.mjs} +19 -19
- package/fesm2022/{flusys-ng-iam-user-action-selector.component-2wdl9Ci6.mjs.map → flusys-ng-iam-user-action-selector.component-BwZD9-jV.mjs.map} +1 -1
- package/fesm2022/flusys-ng-iam.mjs +36 -36
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flusys-ng-iam-role-form-page.component-DnkWkbTF.mjs","names":[],"sources":["../../../projects/ng-iam/pages/role/role-form-page.component.ts"],"sourcesContent":["import { Component, computed, effect, inject, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { form, FormField, required } from '@angular/forms/signals';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { APP_CONFIG, isCompanyFeatureEnabled } from '@flusys/ng-core';\nimport { LAYOUT_AUTH_STATE } from '@flusys/ng-layout';\nimport {\n CheckboxComponent,\n FButtonDirective,\n InputTextDirective,\n MessageService,\n UiIconComponent,\n} from '@flusys/ng-ui';\nimport {\n TranslatePipe,\n TranslateService,\n} from '@flusys/ng-shared';\nimport { IRole } from '../../interfaces/role.interface';\nimport { RoleApiService } from '../../services/role-api.service';\n\ninterface IRoleFormModel {\n id: string;\n name: string;\n description: string;\n serial: string;\n isActive: boolean;\n}\n\n@Component({\n selector: 'lib-role-form-page',\n imports: [\n CheckboxComponent,\n FButtonDirective,\n InputTextDirective,\n UiIconComponent,\n FormField,\n TranslatePipe,\n ],\n template: `\n <div class=\"card\">\n <h3 class=\"text-lg sm:text-xl font-semibold mb-4\">\n {{\n isEditMode()\n ? ('iam.role.edit' | translate)\n : ('iam.role.new' | translate)\n }}\n </h3>\n\n <form\n (submit)=\"onSubmit($event)\"\n class=\"grid grid-cols-1 md:grid-cols-2 gap-4\"\n >\n <!-- Name -->\n <div class=\"flex flex-col gap-2\">\n <label for=\"name\" class=\"font-medium\"\n >{{ 'iam.role.name' | translate }} *</label\n >\n <input\n fInputText\n id=\"name\"\n [formField]=\"roleForm.name\"\n [placeholder]=\"'iam.role.name.placeholder' | translate\"\n />\n </div>\n\n <!-- Description -->\n <div class=\"flex flex-col gap-2\">\n <label for=\"description\" class=\"font-medium\">{{\n 'shared.description' | translate\n }}</label>\n <input\n fInputText\n id=\"description\"\n [formField]=\"roleForm.description\"\n [placeholder]=\"'shared.description.placeholder' | translate\"\n />\n </div>\n\n <!-- Order -->\n <div class=\"flex flex-col gap-2\">\n <label for=\"serial\" class=\"font-medium\">{{\n 'shared.display.order' | translate\n }}</label>\n <input\n fInputText\n id=\"serial\"\n type=\"number\"\n [formField]=\"roleForm.serial\"\n [placeholder]=\"'shared.display.order.placeholder' | translate\"\n />\n </div>\n\n <!-- Is Active -->\n <div class=\"flex items-end gap-2 pb-1\">\n <f-checkbox\n [formField]=\"roleForm.isActive\"\n [binary]=\"true\"\n inputId=\"isActive\"\n />\n <label for=\"isActive\">{{ 'shared.active' | translate }}</label>\n </div>\n\n <!-- Actions -->\n <div class=\"flex justify-end gap-2 md:col-span-2 pt-4\">\n <button\n fButton\n type=\"button\"\n severity=\"secondary\"\n [outlined]=\"true\"\n (click)=\"onBack()\"\n >\n <span pButtonLabel>{{ 'shared.cancel' | translate }}</span>\n </button>\n <button\n fButton\n type=\"submit\"\n [disabled]=\"!isFormValid() || isLoading()\"\n >\n @if (isLoading()) {\n <ui-icon pButtonIcon name=\"spinner\" [spin]=\"true\"></ui-icon>\n }\n <span pButtonLabel>{{ \n isEditMode()\n ? ('shared.update' | translate)\n : ('shared.create' | translate)\n }}</span>\n </button>\n </div>\n </form>\n </div>\n `,\n})\nexport class RoleFormPageComponent {\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly appConfig = inject(APP_CONFIG);\n private readonly companyContext = inject(LAYOUT_AUTH_STATE);\n private readonly roleApi = inject(RoleApiService);\n private readonly messageService = inject(MessageService);\n private readonly translateAdapter = inject(TranslateService, {\n optional: true,\n });\n\n private readonly routeParams = toSignal(this.route.paramMap);\n private initialized = false;\n\n private translate(\n key: string,\n vars?: Record<string, string | number>,\n ): string {\n return this.translateAdapter?.translate(key, vars) ?? key;\n }\n\n readonly isLoading = signal(false);\n readonly existingRole = signal<IRole | null>(null);\n readonly isEditMode = computed(() => !!this.existingRole());\n\n readonly formModel = signal<IRoleFormModel>({\n id: '',\n name: '',\n description: '',\n serial: '',\n isActive: true,\n });\n\n readonly roleForm = form(this.formModel, (f) => {\n required(f.name, {\n message: this.translate('shared.validation.required', {\n field: this.translate('iam.role.name'),\n }),\n });\n });\n\n readonly isFormValid = computed(() => {\n const model = this.formModel();\n return model.name.trim().length > 0;\n });\n\n constructor() {\n effect(() => {\n const params = this.routeParams();\n if (!params || this.initialized) return;\n\n this.initialized = true;\n const id = params.get('id');\n if (id && id !== 'new') {\n this.loadRole(id);\n }\n });\n }\n\n async loadRole(id: string): Promise<void> {\n this.isLoading.set(true);\n try {\n const response = await this.roleApi.findById(id);\n const role = response?.data;\n\n if (role?.readOnly) {\n this.messageService.add({\n severity: 'error',\n summary: this.translate('shared.error'),\n detail: this.translate('iam.role.readonly.edit.forbidden'),\n });\n this.router.navigate(['/iam/roles']);\n return;\n }\n\n if (role) {\n this.existingRole.set(role);\n this.formModel.set({\n id: role.id,\n name: role.name,\n description: role.description ?? '',\n serial: role.serial?.toString() ?? '',\n isActive: role.isActive,\n });\n } else {\n // Error toast handled by global interceptor\n this.router.navigate(['/iam/roles']);\n }\n } catch {\n // Error toast handled by global interceptor\n this.router.navigate(['/iam/roles']);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n async onSubmit(event: Event): Promise<void> {\n event.preventDefault();\n\n if (!this.isFormValid()) {\n this.messageService.add({\n severity: 'error',\n summary: this.translate('shared.validation.error'),\n detail: this.translate('shared.fill.required.fields'),\n });\n return;\n }\n\n this.isLoading.set(true);\n\n try {\n const formValue = this.formModel();\n\n // Get company context if feature enabled\n const companyId = isCompanyFeatureEnabled(this.appConfig)\n ? this.companyContext.currentCompanyInfo()?.id || undefined\n : undefined;\n\n // Convert empty strings to undefined for DTO compatibility\n const dto = {\n ...formValue,\n description: formValue.description || undefined,\n serial: formValue.serial ? parseInt(formValue.serial, 10) : undefined,\n companyId: this.isEditMode() ? undefined : companyId,\n };\n\n const response = this.isEditMode()\n ? await this.roleApi.update(dto)\n : await this.roleApi.insert(dto);\n\n this.messageService.add({\n severity: 'success',\n summary: this.translate('shared.success'),\n detail: response.messageKey\n ? this.translate(\n response.messageKey,\n response.messageVariables as Record<string, string | number>,\n )\n : (response.message ?? ''),\n });\n\n this.router.navigate(['/iam/roles']);\n } catch {\n // Error toast handled by global interceptor\n } finally {\n this.isLoading.set(false);\n }\n }\n\n onBack(): void {\n this.router.navigate(['/iam/roles']);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flusys-ng-iam-role-form-page.component-Crdceypx.mjs","names":[],"sources":["../../../projects/ng-iam/pages/role/role-form-page.component.ts"],"sourcesContent":["import { Component, computed, effect, inject, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { form, FormField, required } from '@angular/forms/signals';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { APP_CONFIG, isCompanyFeatureEnabled } from '@flusys/ng-core';\nimport { LAYOUT_AUTH_STATE } from '@flusys/ng-layout';\nimport {\n CheckboxComponent,\n FButtonDirective,\n InputTextDirective,\n MessageService,\n UiIconComponent,\n} from '@flusys/ng-ui';\nimport {\n TranslatePipe,\n TranslateService,\n} from '@flusys/ng-shared';\nimport { IRole } from '../../interfaces/role.interface';\nimport { RoleApiService } from '../../services/role-api.service';\n\ninterface IRoleFormModel {\n id: string;\n name: string;\n description: string;\n serial: string;\n isActive: boolean;\n}\n\n@Component({\n selector: 'lib-role-form-page',\n imports: [\n CheckboxComponent,\n FButtonDirective,\n InputTextDirective,\n UiIconComponent,\n FormField,\n TranslatePipe,\n ],\n template: `\n <div class=\"card\">\n <h3 class=\"text-lg sm:text-xl font-semibold mb-4\">\n {{\n isEditMode()\n ? ('iam.role.edit' | translate)\n : ('iam.role.new' | translate)\n }}\n </h3>\n\n <form\n (submit)=\"onSubmit($event)\"\n class=\"grid grid-cols-1 md:grid-cols-2 gap-4\"\n >\n <!-- Name -->\n <div class=\"flex flex-col gap-2\">\n <label for=\"name\" class=\"font-medium\"\n >{{ 'iam.role.name' | translate }} *</label\n >\n <input\n fInputText\n id=\"name\"\n [formField]=\"roleForm.name\"\n [placeholder]=\"'iam.role.name.placeholder' | translate\"\n />\n </div>\n\n <!-- Description -->\n <div class=\"flex flex-col gap-2\">\n <label for=\"description\" class=\"font-medium\">{{\n 'shared.description' | translate\n }}</label>\n <input\n fInputText\n id=\"description\"\n [formField]=\"roleForm.description\"\n [placeholder]=\"'shared.description.placeholder' | translate\"\n />\n </div>\n\n <!-- Order -->\n <div class=\"flex flex-col gap-2\">\n <label for=\"serial\" class=\"font-medium\">{{\n 'shared.display.order' | translate\n }}</label>\n <input\n fInputText\n id=\"serial\"\n type=\"number\"\n [formField]=\"roleForm.serial\"\n [placeholder]=\"'shared.display.order.placeholder' | translate\"\n />\n </div>\n\n <!-- Is Active -->\n <div class=\"flex items-end gap-2 pb-1\">\n <f-checkbox\n [formField]=\"roleForm.isActive\"\n [binary]=\"true\"\n inputId=\"isActive\"\n />\n <label for=\"isActive\">{{ 'shared.active' | translate }}</label>\n </div>\n\n <!-- Actions -->\n <div class=\"flex justify-end gap-2 md:col-span-2 pt-4\">\n <button\n fButton\n type=\"button\"\n severity=\"secondary\"\n [outlined]=\"true\"\n (click)=\"onBack()\"\n >\n <span pButtonLabel>{{ 'shared.cancel' | translate }}</span>\n </button>\n <button\n fButton\n type=\"submit\"\n [disabled]=\"!isFormValid() || isLoading()\"\n >\n @if (isLoading()) {\n <ui-icon pButtonIcon name=\"spinner\" [spin]=\"true\"></ui-icon>\n }\n <span pButtonLabel>{{ \n isEditMode()\n ? ('shared.update' | translate)\n : ('shared.create' | translate)\n }}</span>\n </button>\n </div>\n </form>\n </div>\n `,\n})\nexport class RoleFormPageComponent {\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly appConfig = inject(APP_CONFIG);\n private readonly companyContext = inject(LAYOUT_AUTH_STATE);\n private readonly roleApi = inject(RoleApiService);\n private readonly messageService = inject(MessageService);\n private readonly translateAdapter = inject(TranslateService, {\n optional: true,\n });\n\n private readonly routeParams = toSignal(this.route.paramMap);\n private initialized = false;\n\n private translate(\n key: string,\n vars?: Record<string, string | number>,\n ): string {\n return this.translateAdapter?.translate(key, vars) ?? key;\n }\n\n readonly isLoading = signal(false);\n readonly existingRole = signal<IRole | null>(null);\n readonly isEditMode = computed(() => !!this.existingRole());\n\n readonly formModel = signal<IRoleFormModel>({\n id: '',\n name: '',\n description: '',\n serial: '',\n isActive: true,\n });\n\n readonly roleForm = form(this.formModel, (f) => {\n required(f.name, {\n message: this.translate('shared.validation.required', {\n field: this.translate('iam.role.name'),\n }),\n });\n });\n\n readonly isFormValid = computed(() => {\n const model = this.formModel();\n return model.name.trim().length > 0;\n });\n\n constructor() {\n effect(() => {\n const params = this.routeParams();\n if (!params || this.initialized) return;\n\n this.initialized = true;\n const id = params.get('id');\n if (id && id !== 'new') {\n this.loadRole(id);\n }\n });\n }\n\n async loadRole(id: string): Promise<void> {\n this.isLoading.set(true);\n try {\n const response = await this.roleApi.findById(id);\n const role = response?.data;\n\n if (role?.readOnly) {\n this.messageService.add({\n severity: 'error',\n summary: this.translate('shared.error'),\n detail: this.translate('iam.role.readonly.edit.forbidden'),\n });\n this.router.navigate(['/iam/roles']);\n return;\n }\n\n if (role) {\n this.existingRole.set(role);\n this.formModel.set({\n id: role.id,\n name: role.name,\n description: role.description ?? '',\n serial: role.serial?.toString() ?? '',\n isActive: role.isActive,\n });\n } else {\n // Error toast handled by global interceptor\n this.router.navigate(['/iam/roles']);\n }\n } catch {\n // Error toast handled by global interceptor\n this.router.navigate(['/iam/roles']);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n async onSubmit(event: Event): Promise<void> {\n event.preventDefault();\n\n if (!this.isFormValid()) {\n this.messageService.add({\n severity: 'error',\n summary: this.translate('shared.validation.error'),\n detail: this.translate('shared.fill.required.fields'),\n });\n return;\n }\n\n this.isLoading.set(true);\n\n try {\n const formValue = this.formModel();\n\n // Get company context if feature enabled\n const companyId = isCompanyFeatureEnabled(this.appConfig)\n ? this.companyContext.currentCompanyInfo()?.id || undefined\n : undefined;\n\n // Convert empty strings to undefined for DTO compatibility\n const dto = {\n ...formValue,\n description: formValue.description || undefined,\n serial: formValue.serial ? parseInt(formValue.serial, 10) : undefined,\n companyId: this.isEditMode() ? undefined : companyId,\n };\n\n const response = this.isEditMode()\n ? await this.roleApi.update(dto)\n : await this.roleApi.insert(dto);\n\n this.messageService.add({\n severity: 'success',\n summary: this.translate('shared.success'),\n detail: response.messageKey\n ? this.translate(\n response.messageKey,\n response.messageVariables as Record<string, string | number>,\n )\n : (response.message ?? ''),\n });\n\n this.router.navigate(['/iam/roles']);\n } catch {\n // Error toast handled by global interceptor\n } finally {\n this.isLoading.set(false);\n }\n }\n\n onBack(): void {\n this.router.navigate(['/iam/roles']);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as RoleApiService } from "./flusys-ng-iam-role-api.service-
|
|
1
|
+
import { t as RoleApiService } from "./flusys-ng-iam-role-api.service-COWbPura.mjs";
|
|
2
2
|
import { RolePermittedUsersDialogComponent } from "./flusys-ng-iam.mjs";
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import { Component, computed, effect, inject, signal, untracked } from "@angular/core";
|
|
@@ -131,7 +131,7 @@ var RoleListPageComponent = class RoleListPageComponent {
|
|
|
131
131
|
}
|
|
132
132
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
133
133
|
minVersion: "12.0.0",
|
|
134
|
-
version: "22.2.
|
|
134
|
+
version: "22.2.3",
|
|
135
135
|
ngImport: i0,
|
|
136
136
|
type: RoleListPageComponent,
|
|
137
137
|
deps: [],
|
|
@@ -139,7 +139,7 @@ var RoleListPageComponent = class RoleListPageComponent {
|
|
|
139
139
|
});
|
|
140
140
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
141
141
|
minVersion: "17.0.0",
|
|
142
|
-
version: "22.2.
|
|
142
|
+
version: "22.2.3",
|
|
143
143
|
type: RoleListPageComponent,
|
|
144
144
|
isStandalone: true,
|
|
145
145
|
selector: "lib-role-list-page",
|
|
@@ -506,7 +506,7 @@ var RoleListPageComponent = class RoleListPageComponent {
|
|
|
506
506
|
};
|
|
507
507
|
i0.ɵɵngDeclareClassMetadata({
|
|
508
508
|
minVersion: "12.0.0",
|
|
509
|
-
version: "22.2.
|
|
509
|
+
version: "22.2.3",
|
|
510
510
|
ngImport: i0,
|
|
511
511
|
type: RoleListPageComponent,
|
|
512
512
|
decorators: [{
|
|
@@ -685,4 +685,4 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
685
685
|
});
|
|
686
686
|
export { RoleListPageComponent };
|
|
687
687
|
|
|
688
|
-
//# sourceMappingURL=flusys-ng-iam-role-list-page.component-
|
|
688
|
+
//# sourceMappingURL=flusys-ng-iam-role-list-page.component-DfXkkMES.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flusys-ng-iam-role-list-page.component-Dhd0AtOg.mjs","names":[],"sources":["../../../projects/ng-iam/pages/role/role-list-page.component.ts"],"sourcesContent":["import {\n Component,\n computed,\n effect,\n inject,\n signal,\n untracked,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport {\n APP_CONFIG,\n DEFAULT_APP_NAME,\n getPermissionMode,\n isCompanyFeatureEnabled,\n} from '@flusys/ng-core';\nimport { LAYOUT_AUTH_STATE } from '@flusys/ng-layout';\nimport {\n HasPermissionDirective,\n ROLE_PERMISSIONS,\n TranslatePipe,\n TranslateService,\n USER_ROLE_PERMISSIONS,\n} from '@flusys/ng-shared';\nimport {\n ConfirmationService,\n FButtonDirective,\n IconFieldComponent,\n InputIconComponent,\n InputTextDirective,\n MessageService,\n TableComponent,\n TagComponent,\n TooltipDirective,\n UiIconComponent,\n} from '@flusys/ng-ui';\nimport { RolePermittedUsersDialogComponent } from '../../components/role-permitted-users-dialog.component';\nimport { IRole } from '../../interfaces/role.interface';\nimport { RoleApiService } from '../../services/role-api.service';\n\n@Component({\n selector: 'lib-role-list-page',\n imports: [\n FButtonDirective,\n FormsModule,\n IconFieldComponent,\n InputIconComponent,\n InputTextDirective,\n TableComponent,\n TagComponent,\n TooltipDirective,\n UiIconComponent,\n HasPermissionDirective,\n RolePermittedUsersDialogComponent,\n TranslatePipe,\n ],\n template: `\n <div class=\"card\">\n <div\n class=\"flex flex-col sm:flex-row justify-between items-start sm:items-center gap-3 mb-4\"\n >\n <div>\n <h3 class=\"text-lg sm:text-xl font-semibold\">\n {{ 'iam.role.title' | translate }}\n </h3>\n @if (showCompanyInfo()) {\n <p class=\"text-sm text-muted-color mt-1\">\n {{ 'iam.company.title' | translate }}: {{ currentCompanyName() }}\n </p>\n }\n </div>\n <div class=\"flex flex-wrap items-center gap-2 w-full sm:w-auto\">\n <f-iconfield class=\"w-full sm:w-64\">\n <f-inputicon icon=\"search\" />\n <input\n fInputText\n type=\"text\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"onSearchChange($event)\"\n [placeholder]=\"'shared.search' | translate\"\n class=\"w-full\"\n />\n </f-iconfield>\n <button\n fButton\n *hasPermission=\"ROLE_PERMISSIONS.CREATE\"\n (click)=\"onCreate()\"\n class=\"w-full sm:w-auto\"\n >\n <ui-icon pButtonIcon name=\"plus\"></ui-icon>\n <span pButtonLabel>{{ 'iam.role.new' | translate }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"overflow-x-auto -mx-4 sm:mx-0\">\n <f-table\n [value]=\"roles()\"\n [loading]=\"isLoading()\"\n [paginator]=\"total() > 0\"\n [rows]=\"pageSize()\"\n [first]=\"first()\"\n [totalRecords]=\"total()\"\n [lazy]=\"true\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [rowsPerPageOptions]=\"[10, 25, 50]\"\n [scrollable]=\"true\"\n [tableStyle]=\"{ 'min-width': '40rem' }\"\n >\n <ng-template #header>\n <tr>\n <th>{{ 'iam.role.name' | translate }}</th>\n <th class=\"hidden md:table-cell\">\n {{ 'shared.description' | translate }}\n </th>\n <th>{{ 'shared.active' | translate }}</th>\n <th class=\"hidden sm:table-cell\">\n {{ 'shared.read.only' | translate }}\n </th>\n <th class=\"w-[120px]\">{{ 'shared.actions' | translate }}</th>\n </tr>\n </ng-template>\n <ng-template #body let-role>\n <tr>\n <td>{{ role.name }}</td>\n <td class=\"hidden md:table-cell\">\n {{ role.description ?? '-' }}\n </td>\n <td>\n <f-tag\n [value]=\"\n role.isActive\n ? ('shared.active' | translate)\n : ('shared.inactive' | translate)\n \"\n [severity]=\"role.isActive ? 'success' : 'secondary'\"\n />\n </td>\n <td class=\"hidden sm:table-cell\">\n <f-tag\n [value]=\"\n role.readOnly\n ? ('shared.yes' | translate)\n : ('shared.no' | translate)\n \"\n [severity]=\"role.readOnly ? 'warn' : 'secondary'\"\n />\n </td>\n <td>\n <div class=\"flex gap-1\">\n <button\n fButton\n *hasPermission=\"ROLE_PERMISSIONS.UPDATE\"\n [text]=\"true\"\n severity=\"secondary\"\n size=\"small\"\n [disabled]=\"role.readOnly\"\n [fTooltip]=\"'shared.edit' | translate\"\n (click)=\"onEdit(role)\"\n >\n <ui-icon pButtonIcon name=\"pencil\"></ui-icon>\n </button>\n @if (showRoleUsers()) {\n <button\n fButton\n *hasPermission=\"USER_ROLE_PERMISSIONS.READ\"\n [text]=\"true\"\n severity=\"secondary\"\n size=\"small\"\n [fTooltip]=\"'iam.permission.view.users' | translate\"\n (click)=\"onViewUsers(role)\"\n >\n <ui-icon pButtonIcon name=\"users\"></ui-icon>\n </button>\n }\n <button\n fButton\n *hasPermission=\"ROLE_PERMISSIONS.DELETE\"\n [text]=\"true\"\n severity=\"danger\"\n size=\"small\"\n [fTooltip]=\"'shared.delete' | translate\"\n [disabled]=\"role.readOnly\"\n (click)=\"onDelete(role)\"\n >\n <ui-icon pButtonIcon name=\"trash\"></ui-icon>\n </button>\n </div>\n </td>\n </tr>\n </ng-template>\n <ng-template #emptymessage>\n <tr>\n <td colspan=\"5\" class=\"text-center py-4 text-muted-color\">\n {{ 'iam.role.no.roles' | translate }}\n </td>\n </tr>\n </ng-template>\n </f-table>\n </div>\n </div>\n\n <flusys-role-permitted-users-dialog\n [visible]=\"permittedUsersDialogVisible()\"\n [role]=\"selectedRole()\"\n (closed)=\"permittedUsersDialogVisible.set(false)\"\n />\n `,\n})\nexport class RoleListPageComponent {\n readonly ROLE_PERMISSIONS = ROLE_PERMISSIONS;\n readonly USER_ROLE_PERMISSIONS = USER_ROLE_PERMISSIONS;\n\n private readonly router = inject(Router);\n private readonly appConfig = inject(APP_CONFIG);\n private readonly companyContext = inject(LAYOUT_AUTH_STATE);\n private readonly roleApi = inject(RoleApiService);\n private readonly messageService = inject(MessageService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly translateAdapter = inject(TranslateService, {\n optional: true,\n });\n\n private translate(\n key: string,\n vars?: Record<string, string | number>,\n ): string {\n return this.translateAdapter?.translate(key, vars) ?? key;\n }\n\n readonly roles = signal<IRole[]>([]);\n readonly isLoading = signal(false);\n readonly total = signal(0);\n readonly pageSize = signal(10);\n readonly first = signal(0);\n private readonly _searchTerm = signal('');\n readonly searchTerm = this._searchTerm.asReadonly();\n readonly showCompanyInfo = computed(\n () => this.appConfig.enableCompanyFeature,\n );\n readonly showRoleUsers = computed(() => {\n const permissionMode = getPermissionMode(this.appConfig);\n return permissionMode === 'rbac' || permissionMode === 'full';\n });\n readonly currentCompanyName = computed(\n () => this.companyContext.currentCompanyInfo()?.name ?? DEFAULT_APP_NAME,\n );\n\n readonly permittedUsersDialogVisible = signal(false);\n readonly selectedRole = signal<IRole | null>(null);\n\n private previousCompanyId: string | undefined | null = undefined;\n\n constructor() {\n effect(() => {\n const currentCompanyId =\n this.companyContext.currentCompanyInfo()?.id ?? null;\n if (this.previousCompanyId === undefined) {\n this.previousCompanyId = currentCompanyId;\n return;\n }\n if (this.previousCompanyId === currentCompanyId) return;\n this.previousCompanyId = currentCompanyId;\n untracked(() => {\n this.first.set(0);\n this.loadRoles();\n });\n });\n }\n\n private loadSeq = 0;\n\n private async loadRoles(): Promise<void> {\n const seq = ++this.loadSeq;\n this.isLoading.set(true);\n try {\n const enableCompanyFeature = isCompanyFeatureEnabled(this.appConfig);\n const companyId = enableCompanyFeature\n ? this.companyContext.currentCompanyInfo()?.id || undefined\n : undefined;\n\n const selectFields = [\n 'id',\n 'name',\n 'description',\n 'isActive',\n 'readOnly',\n 'serial',\n 'createdAt',\n 'deletedAt',\n ];\n if (enableCompanyFeature) {\n selectFields.push('companyId');\n }\n\n const response = await this.roleApi.getAll(\n {\n filter: companyId ? { companyId } : undefined,\n pagination: {\n currentPage: Math.floor(this.first() / this.pageSize()),\n pageSize: this.pageSize(),\n },\n select: selectFields,\n sort: { id: 'ASC' },\n },\n this._searchTerm(),\n );\n\n if (seq !== this.loadSeq) return;\n this.roles.set(response?.data ?? []);\n this.total.set(response?.meta?.total ?? 0);\n } catch {\n // Error toast handled by global interceptor\n } finally {\n if (seq === this.loadSeq) this.isLoading.set(false);\n }\n }\n\n onCreate(): void {\n this.router.navigate(['/iam/roles/new']);\n }\n\n onEdit(role: IRole): void {\n this.router.navigate(['/iam/roles', role.id]);\n }\n\n onViewUsers(role: IRole): void {\n this.selectedRole.set(role);\n this.permittedUsersDialogVisible.set(true);\n }\n\n onDelete(role: IRole): void {\n this.confirmationService.confirm({\n message: this.translate('shared.confirm.delete.item', {\n name: role.name,\n }),\n header: this.translate('iam.role.delete.title'),\n icon: 'exclamation-triangle',\n accept: async () => {\n try {\n const response = await this.roleApi.delete({\n id: role.id,\n type: 'permanent',\n });\n\n this.roles.update((list) => list.filter((r) => r.id !== role.id));\n this.total.update((t) => Math.max(0, t - 1));\n\n this.messageService.add({\n severity: 'success',\n summary: this.translate('shared.success'),\n detail: response?.messageKey\n ? this.translate(\n response.messageKey,\n response.messageVariables as Record<string, string | number>,\n )\n : response?.message,\n });\n } catch {\n // Error toast handled by global interceptor\n }\n },\n });\n }\n\n onLazyLoad(event: { first?: number | null; rows?: number | null }): void {\n this.first.set(event.first ?? 0);\n this.pageSize.set(event.rows ?? 10);\n this.loadRoles();\n }\n\n onSearchChange(value: string): void {\n this._searchTerm.set(value);\n this.first.set(0);\n this.loadRoles();\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flusys-ng-iam-role-list-page.component-DfXkkMES.mjs","names":[],"sources":["../../../projects/ng-iam/pages/role/role-list-page.component.ts"],"sourcesContent":["import {\n Component,\n computed,\n effect,\n inject,\n signal,\n untracked,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport {\n APP_CONFIG,\n DEFAULT_APP_NAME,\n getPermissionMode,\n isCompanyFeatureEnabled,\n} from '@flusys/ng-core';\nimport { LAYOUT_AUTH_STATE } from '@flusys/ng-layout';\nimport {\n HasPermissionDirective,\n ROLE_PERMISSIONS,\n TranslatePipe,\n TranslateService,\n USER_ROLE_PERMISSIONS,\n} from '@flusys/ng-shared';\nimport {\n ConfirmationService,\n FButtonDirective,\n IconFieldComponent,\n InputIconComponent,\n InputTextDirective,\n MessageService,\n TableComponent,\n TagComponent,\n TooltipDirective,\n UiIconComponent,\n} from '@flusys/ng-ui';\nimport { RolePermittedUsersDialogComponent } from '../../components/role-permitted-users-dialog.component';\nimport { IRole } from '../../interfaces/role.interface';\nimport { RoleApiService } from '../../services/role-api.service';\n\n@Component({\n selector: 'lib-role-list-page',\n imports: [\n FButtonDirective,\n FormsModule,\n IconFieldComponent,\n InputIconComponent,\n InputTextDirective,\n TableComponent,\n TagComponent,\n TooltipDirective,\n UiIconComponent,\n HasPermissionDirective,\n RolePermittedUsersDialogComponent,\n TranslatePipe,\n ],\n template: `\n <div class=\"card\">\n <div\n class=\"flex flex-col sm:flex-row justify-between items-start sm:items-center gap-3 mb-4\"\n >\n <div>\n <h3 class=\"text-lg sm:text-xl font-semibold\">\n {{ 'iam.role.title' | translate }}\n </h3>\n @if (showCompanyInfo()) {\n <p class=\"text-sm text-muted-color mt-1\">\n {{ 'iam.company.title' | translate }}: {{ currentCompanyName() }}\n </p>\n }\n </div>\n <div class=\"flex flex-wrap items-center gap-2 w-full sm:w-auto\">\n <f-iconfield class=\"w-full sm:w-64\">\n <f-inputicon icon=\"search\" />\n <input\n fInputText\n type=\"text\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"onSearchChange($event)\"\n [placeholder]=\"'shared.search' | translate\"\n class=\"w-full\"\n />\n </f-iconfield>\n <button\n fButton\n *hasPermission=\"ROLE_PERMISSIONS.CREATE\"\n (click)=\"onCreate()\"\n class=\"w-full sm:w-auto\"\n >\n <ui-icon pButtonIcon name=\"plus\"></ui-icon>\n <span pButtonLabel>{{ 'iam.role.new' | translate }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"overflow-x-auto -mx-4 sm:mx-0\">\n <f-table\n [value]=\"roles()\"\n [loading]=\"isLoading()\"\n [paginator]=\"total() > 0\"\n [rows]=\"pageSize()\"\n [first]=\"first()\"\n [totalRecords]=\"total()\"\n [lazy]=\"true\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [rowsPerPageOptions]=\"[10, 25, 50]\"\n [scrollable]=\"true\"\n [tableStyle]=\"{ 'min-width': '40rem' }\"\n >\n <ng-template #header>\n <tr>\n <th>{{ 'iam.role.name' | translate }}</th>\n <th class=\"hidden md:table-cell\">\n {{ 'shared.description' | translate }}\n </th>\n <th>{{ 'shared.active' | translate }}</th>\n <th class=\"hidden sm:table-cell\">\n {{ 'shared.read.only' | translate }}\n </th>\n <th class=\"w-[120px]\">{{ 'shared.actions' | translate }}</th>\n </tr>\n </ng-template>\n <ng-template #body let-role>\n <tr>\n <td>{{ role.name }}</td>\n <td class=\"hidden md:table-cell\">\n {{ role.description ?? '-' }}\n </td>\n <td>\n <f-tag\n [value]=\"\n role.isActive\n ? ('shared.active' | translate)\n : ('shared.inactive' | translate)\n \"\n [severity]=\"role.isActive ? 'success' : 'secondary'\"\n />\n </td>\n <td class=\"hidden sm:table-cell\">\n <f-tag\n [value]=\"\n role.readOnly\n ? ('shared.yes' | translate)\n : ('shared.no' | translate)\n \"\n [severity]=\"role.readOnly ? 'warn' : 'secondary'\"\n />\n </td>\n <td>\n <div class=\"flex gap-1\">\n <button\n fButton\n *hasPermission=\"ROLE_PERMISSIONS.UPDATE\"\n [text]=\"true\"\n severity=\"secondary\"\n size=\"small\"\n [disabled]=\"role.readOnly\"\n [fTooltip]=\"'shared.edit' | translate\"\n (click)=\"onEdit(role)\"\n >\n <ui-icon pButtonIcon name=\"pencil\"></ui-icon>\n </button>\n @if (showRoleUsers()) {\n <button\n fButton\n *hasPermission=\"USER_ROLE_PERMISSIONS.READ\"\n [text]=\"true\"\n severity=\"secondary\"\n size=\"small\"\n [fTooltip]=\"'iam.permission.view.users' | translate\"\n (click)=\"onViewUsers(role)\"\n >\n <ui-icon pButtonIcon name=\"users\"></ui-icon>\n </button>\n }\n <button\n fButton\n *hasPermission=\"ROLE_PERMISSIONS.DELETE\"\n [text]=\"true\"\n severity=\"danger\"\n size=\"small\"\n [fTooltip]=\"'shared.delete' | translate\"\n [disabled]=\"role.readOnly\"\n (click)=\"onDelete(role)\"\n >\n <ui-icon pButtonIcon name=\"trash\"></ui-icon>\n </button>\n </div>\n </td>\n </tr>\n </ng-template>\n <ng-template #emptymessage>\n <tr>\n <td colspan=\"5\" class=\"text-center py-4 text-muted-color\">\n {{ 'iam.role.no.roles' | translate }}\n </td>\n </tr>\n </ng-template>\n </f-table>\n </div>\n </div>\n\n <flusys-role-permitted-users-dialog\n [visible]=\"permittedUsersDialogVisible()\"\n [role]=\"selectedRole()\"\n (closed)=\"permittedUsersDialogVisible.set(false)\"\n />\n `,\n})\nexport class RoleListPageComponent {\n readonly ROLE_PERMISSIONS = ROLE_PERMISSIONS;\n readonly USER_ROLE_PERMISSIONS = USER_ROLE_PERMISSIONS;\n\n private readonly router = inject(Router);\n private readonly appConfig = inject(APP_CONFIG);\n private readonly companyContext = inject(LAYOUT_AUTH_STATE);\n private readonly roleApi = inject(RoleApiService);\n private readonly messageService = inject(MessageService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly translateAdapter = inject(TranslateService, {\n optional: true,\n });\n\n private translate(\n key: string,\n vars?: Record<string, string | number>,\n ): string {\n return this.translateAdapter?.translate(key, vars) ?? key;\n }\n\n readonly roles = signal<IRole[]>([]);\n readonly isLoading = signal(false);\n readonly total = signal(0);\n readonly pageSize = signal(10);\n readonly first = signal(0);\n private readonly _searchTerm = signal('');\n readonly searchTerm = this._searchTerm.asReadonly();\n readonly showCompanyInfo = computed(\n () => this.appConfig.enableCompanyFeature,\n );\n readonly showRoleUsers = computed(() => {\n const permissionMode = getPermissionMode(this.appConfig);\n return permissionMode === 'rbac' || permissionMode === 'full';\n });\n readonly currentCompanyName = computed(\n () => this.companyContext.currentCompanyInfo()?.name ?? DEFAULT_APP_NAME,\n );\n\n readonly permittedUsersDialogVisible = signal(false);\n readonly selectedRole = signal<IRole | null>(null);\n\n private previousCompanyId: string | undefined | null = undefined;\n\n constructor() {\n effect(() => {\n const currentCompanyId =\n this.companyContext.currentCompanyInfo()?.id ?? null;\n if (this.previousCompanyId === undefined) {\n this.previousCompanyId = currentCompanyId;\n return;\n }\n if (this.previousCompanyId === currentCompanyId) return;\n this.previousCompanyId = currentCompanyId;\n untracked(() => {\n this.first.set(0);\n this.loadRoles();\n });\n });\n }\n\n private loadSeq = 0;\n\n private async loadRoles(): Promise<void> {\n const seq = ++this.loadSeq;\n this.isLoading.set(true);\n try {\n const enableCompanyFeature = isCompanyFeatureEnabled(this.appConfig);\n const companyId = enableCompanyFeature\n ? this.companyContext.currentCompanyInfo()?.id || undefined\n : undefined;\n\n const selectFields = [\n 'id',\n 'name',\n 'description',\n 'isActive',\n 'readOnly',\n 'serial',\n 'createdAt',\n 'deletedAt',\n ];\n if (enableCompanyFeature) {\n selectFields.push('companyId');\n }\n\n const response = await this.roleApi.getAll(\n {\n filter: companyId ? { companyId } : undefined,\n pagination: {\n currentPage: Math.floor(this.first() / this.pageSize()),\n pageSize: this.pageSize(),\n },\n select: selectFields,\n sort: { id: 'ASC' },\n },\n this._searchTerm(),\n );\n\n if (seq !== this.loadSeq) return;\n this.roles.set(response?.data ?? []);\n this.total.set(response?.meta?.total ?? 0);\n } catch {\n // Error toast handled by global interceptor\n } finally {\n if (seq === this.loadSeq) this.isLoading.set(false);\n }\n }\n\n onCreate(): void {\n this.router.navigate(['/iam/roles/new']);\n }\n\n onEdit(role: IRole): void {\n this.router.navigate(['/iam/roles', role.id]);\n }\n\n onViewUsers(role: IRole): void {\n this.selectedRole.set(role);\n this.permittedUsersDialogVisible.set(true);\n }\n\n onDelete(role: IRole): void {\n this.confirmationService.confirm({\n message: this.translate('shared.confirm.delete.item', {\n name: role.name,\n }),\n header: this.translate('iam.role.delete.title'),\n icon: 'exclamation-triangle',\n accept: async () => {\n try {\n const response = await this.roleApi.delete({\n id: role.id,\n type: 'permanent',\n });\n\n this.roles.update((list) => list.filter((r) => r.id !== role.id));\n this.total.update((t) => Math.max(0, t - 1));\n\n this.messageService.add({\n severity: 'success',\n summary: this.translate('shared.success'),\n detail: response?.messageKey\n ? this.translate(\n response.messageKey,\n response.messageVariables as Record<string, string | number>,\n )\n : response?.message,\n });\n } catch {\n // Error toast handled by global interceptor\n }\n },\n });\n }\n\n onLazyLoad(event: { first?: number | null; rows?: number | null }): void {\n this.first.set(event.first ?? 0);\n this.pageSize.set(event.rows ?? 10);\n this.loadRoles();\n }\n\n onSearchChange(value: string): void {\n this._searchTerm.set(value);\n this.first.set(0);\n this.loadRoles();\n }\n}\n"],"mappings":"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"}
|
package/fesm2022/{flusys-ng-iam-tree-utils-B1pBG4At.mjs → flusys-ng-iam-tree-utils-CRflRjIJ.mjs}
RENAMED
|
@@ -21,7 +21,7 @@ var ActionApiService = class ActionApiService extends ApiResourceService {
|
|
|
21
21
|
}
|
|
22
22
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
23
23
|
minVersion: "12.0.0",
|
|
24
|
-
version: "22.2.
|
|
24
|
+
version: "22.2.3",
|
|
25
25
|
ngImport: i0,
|
|
26
26
|
type: ActionApiService,
|
|
27
27
|
deps: [],
|
|
@@ -29,14 +29,14 @@ var ActionApiService = class ActionApiService extends ApiResourceService {
|
|
|
29
29
|
});
|
|
30
30
|
static ɵprov = i0.ɵɵngDeclareService({
|
|
31
31
|
minVersion: "22.0.0",
|
|
32
|
-
version: "22.2.
|
|
32
|
+
version: "22.2.3",
|
|
33
33
|
ngImport: i0,
|
|
34
34
|
type: ActionApiService
|
|
35
35
|
});
|
|
36
36
|
};
|
|
37
37
|
i0.ɵɵngDeclareClassMetadata({
|
|
38
38
|
minVersion: "12.0.0",
|
|
39
|
-
version: "22.2.
|
|
39
|
+
version: "22.2.3",
|
|
40
40
|
ngImport: i0,
|
|
41
41
|
type: ActionApiService,
|
|
42
42
|
decorators: [{ type: Service }],
|
|
@@ -107,4 +107,4 @@ function buildActionParentTree(actions, excludeId) {
|
|
|
107
107
|
}
|
|
108
108
|
export { ActionApiService as a, flattenTree as i, buildTreeFromFlat as n, convertActionToTreeNode as r, buildActionParentTree as t };
|
|
109
109
|
|
|
110
|
-
//# sourceMappingURL=flusys-ng-iam-tree-utils-
|
|
110
|
+
//# sourceMappingURL=flusys-ng-iam-tree-utils-CRflRjIJ.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flusys-ng-iam-tree-utils-
|
|
1
|
+
{"version":3,"file":"flusys-ng-iam-tree-utils-CRflRjIJ.mjs","names":[],"sources":["../../../projects/ng-iam/services/action-api.service.ts","../../../projects/ng-iam/utils/tree-utils.ts"],"sourcesContent":["import { inject, Service } from '@angular/core';\nimport { APP_CONFIG, getServiceUrl, IAppConfig } from '@flusys/ng-core';\nimport { ApiResourceService, ISingleResponse } from '@flusys/ng-shared';\nimport { Observable } from 'rxjs';\nimport {\n IAction,\n IActionTreeDto,\n IUpdateActionDto,\n} from '../interfaces/action.interface';\n\n@Service()\nexport class ActionApiService extends ApiResourceService<\n IUpdateActionDto,\n IAction\n> {\n private readonly appConfig = inject<IAppConfig>(APP_CONFIG);\n\n constructor() {\n super('actions', 'iam');\n }\n\n /** Get actions filtered by company whitelist for permission assignment */\n getActionsForPermission(\n companyId?: string,\n ): Observable<ISingleResponse<IActionTreeDto[]>> {\n const iamBaseUrl = getServiceUrl(this.appConfig, 'iam');\n return this.http.post<ISingleResponse<IActionTreeDto[]>>(\n `${iamBaseUrl}/actions/tree-for-permission`,\n { companyId },\n );\n }\n\n /** Get actions in hierarchical tree structure */\n getTree(\n search?: string,\n isActive?: boolean,\n withDeleted?: boolean,\n ): Observable<ISingleResponse<IActionTreeDto[]>> {\n const body: { search?: string; isActive?: boolean; withDeleted?: boolean } =\n {};\n if (search?.trim()) body.search = search.trim();\n if (isActive !== undefined) body.isActive = isActive;\n if (withDeleted !== undefined) body.withDeleted = withDeleted;\n\n const iamBaseUrl = getServiceUrl(this.appConfig, 'iam');\n return this.http.post<ISingleResponse<IActionTreeDto[]>>(\n `${iamBaseUrl}/actions/tree`,\n body,\n );\n }\n}\n","import { IAction, IActionTreeDto } from '../interfaces/action.interface';\nimport { TreeNode } from '@flusys/ng-ui';\n\nexport function flattenTree<T extends { children?: T[] }>(tree: T[]): T[] {\n if (!tree?.length) return [];\n\n const result: T[] = [];\n const flatten = (nodes: T[]): void => {\n for (const node of nodes) {\n result.push(node);\n if (node.children?.length) flatten(node.children);\n }\n };\n flatten(tree);\n return result;\n}\n\nexport function buildTreeFromFlat<\n T extends { id?: string | null; parentId?: string | null },\n>(flatList: T[]): (T & { children: T[] })[] {\n if (!flatList?.length) return [];\n\n const itemMap = new Map<string, T & { children: T[] }>();\n const rootItems: (T & { children: T[] })[] = [];\n\n flatList.forEach((item) => {\n if (item.id) itemMap.set(item.id, { ...item, children: [] });\n });\n\n flatList.forEach((item) => {\n if (!item.id) return;\n const node = itemMap.get(item.id);\n if (!node) return;\n\n if (!item.parentId) {\n rootItems.push(node);\n } else {\n const parent = itemMap.get(item.parentId);\n if (parent) {\n parent.children.push(node);\n } else {\n rootItems.push(node);\n }\n }\n });\n\n return rootItems;\n}\n\nexport function convertActionToTreeNode(\n actions: IActionTreeDto[],\n): TreeNode<IAction>[] {\n if (!actions?.length) return [];\n\n const convert = (action: IActionTreeDto): TreeNode<IAction> => {\n const { children, ...actionData } = action;\n return {\n data: actionData,\n children: children?.map(convert) ?? [],\n leaf: !children?.length,\n expanded: false,\n };\n };\n\n return actions.map(convert);\n}\n\nexport function buildActionParentTree(\n actions: IAction[],\n excludeId?: string | null,\n): TreeNode<IAction>[] {\n const tree = buildTreeFromFlat(actions);\n\n const convert = (\n nodes: (IAction & { children: IAction[] })[],\n ): TreeNode<IAction>[] =>\n nodes\n .filter((node) => node.id !== excludeId)\n .map((node) => {\n const { children, ...data } = node;\n const converted = convert(\n children as (IAction & { children: IAction[] })[],\n );\n return {\n key: node.id,\n label: node.name,\n data,\n children: converted.length ? converted : undefined,\n leaf: converted.length === 0,\n };\n });\n\n return convert(tree);\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as RoleApiService } from "./flusys-ng-iam-role-api.service-
|
|
2
|
-
import { a as ActionApiService, i as flattenTree, n as buildTreeFromFlat, r as convertActionToTreeNode } from "./flusys-ng-iam-tree-utils-
|
|
3
|
-
import { t as PermissionApiService } from "./flusys-ng-iam-permission-api.service-
|
|
1
|
+
import { t as RoleApiService } from "./flusys-ng-iam-role-api.service-COWbPura.mjs";
|
|
2
|
+
import { a as ActionApiService, i as flattenTree, n as buildTreeFromFlat, r as convertActionToTreeNode } from "./flusys-ng-iam-tree-utils-CRflRjIJ.mjs";
|
|
3
|
+
import { t as PermissionApiService } from "./flusys-ng-iam-permission-api.service-C03CJTGi.mjs";
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import { Component, DestroyRef, Service, computed, effect, inject, signal, untracked, viewChild } from "@angular/core";
|
|
6
6
|
import { COMPANY_ACTION_PERMISSIONS, COMPANY_API_PROVIDER, HasPermissionDirective, ROLE_ACTION_PERMISSIONS, TranslatePipe, TranslateService, USER_ACTION_PERMISSIONS, USER_PERMISSION_PROVIDER, USER_ROLE_PERMISSIONS, UserSelectComponent, buildBranchTreeNodes } from "@flusys/ng-shared";
|
|
@@ -406,7 +406,7 @@ var ActionPermissionLogicService = class ActionPermissionLogicService {
|
|
|
406
406
|
}
|
|
407
407
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
408
408
|
minVersion: "12.0.0",
|
|
409
|
-
version: "22.2.
|
|
409
|
+
version: "22.2.3",
|
|
410
410
|
ngImport: i0,
|
|
411
411
|
type: ActionPermissionLogicService,
|
|
412
412
|
deps: [],
|
|
@@ -414,14 +414,14 @@ var ActionPermissionLogicService = class ActionPermissionLogicService {
|
|
|
414
414
|
});
|
|
415
415
|
static ɵprov = i0.ɵɵngDeclareService({
|
|
416
416
|
minVersion: "22.0.0",
|
|
417
|
-
version: "22.2.
|
|
417
|
+
version: "22.2.3",
|
|
418
418
|
ngImport: i0,
|
|
419
419
|
type: ActionPermissionLogicService
|
|
420
420
|
});
|
|
421
421
|
};
|
|
422
422
|
i0.ɵɵngDeclareClassMetadata({
|
|
423
423
|
minVersion: "12.0.0",
|
|
424
|
-
version: "22.2.
|
|
424
|
+
version: "22.2.3",
|
|
425
425
|
ngImport: i0,
|
|
426
426
|
type: ActionPermissionLogicService,
|
|
427
427
|
decorators: [{ type: Service }]
|
|
@@ -632,7 +632,7 @@ var RoleActionSelectorComponent = class RoleActionSelectorComponent extends Base
|
|
|
632
632
|
}
|
|
633
633
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
634
634
|
minVersion: "12.0.0",
|
|
635
|
-
version: "22.2.
|
|
635
|
+
version: "22.2.3",
|
|
636
636
|
ngImport: i0,
|
|
637
637
|
type: RoleActionSelectorComponent,
|
|
638
638
|
deps: [],
|
|
@@ -640,7 +640,7 @@ var RoleActionSelectorComponent = class RoleActionSelectorComponent extends Base
|
|
|
640
640
|
});
|
|
641
641
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
642
642
|
minVersion: "17.0.0",
|
|
643
|
-
version: "22.2.
|
|
643
|
+
version: "22.2.3",
|
|
644
644
|
type: RoleActionSelectorComponent,
|
|
645
645
|
isStandalone: true,
|
|
646
646
|
selector: "flusys-role-action-selector",
|
|
@@ -1175,7 +1175,7 @@ var RoleActionSelectorComponent = class RoleActionSelectorComponent extends Base
|
|
|
1175
1175
|
};
|
|
1176
1176
|
i0.ɵɵngDeclareClassMetadata({
|
|
1177
1177
|
minVersion: "12.0.0",
|
|
1178
|
-
version: "22.2.
|
|
1178
|
+
version: "22.2.3",
|
|
1179
1179
|
ngImport: i0,
|
|
1180
1180
|
type: RoleActionSelectorComponent,
|
|
1181
1181
|
decorators: [{
|
|
@@ -1617,7 +1617,7 @@ var CompanyActionSelectorComponent = class CompanyActionSelectorComponent extend
|
|
|
1617
1617
|
}
|
|
1618
1618
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
1619
1619
|
minVersion: "12.0.0",
|
|
1620
|
-
version: "22.2.
|
|
1620
|
+
version: "22.2.3",
|
|
1621
1621
|
ngImport: i0,
|
|
1622
1622
|
type: CompanyActionSelectorComponent,
|
|
1623
1623
|
deps: [],
|
|
@@ -1625,7 +1625,7 @@ var CompanyActionSelectorComponent = class CompanyActionSelectorComponent extend
|
|
|
1625
1625
|
});
|
|
1626
1626
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
1627
1627
|
minVersion: "17.0.0",
|
|
1628
|
-
version: "22.2.
|
|
1628
|
+
version: "22.2.3",
|
|
1629
1629
|
type: CompanyActionSelectorComponent,
|
|
1630
1630
|
isStandalone: true,
|
|
1631
1631
|
selector: "flusys-company-action-selector",
|
|
@@ -2153,7 +2153,7 @@ var CompanyActionSelectorComponent = class CompanyActionSelectorComponent extend
|
|
|
2153
2153
|
};
|
|
2154
2154
|
i0.ɵɵngDeclareClassMetadata({
|
|
2155
2155
|
minVersion: "12.0.0",
|
|
2156
|
-
version: "22.2.
|
|
2156
|
+
version: "22.2.3",
|
|
2157
2157
|
ngImport: i0,
|
|
2158
2158
|
type: CompanyActionSelectorComponent,
|
|
2159
2159
|
decorators: [{
|
|
@@ -2669,7 +2669,7 @@ var UserRoleSelectorComponent = class UserRoleSelectorComponent {
|
|
|
2669
2669
|
}
|
|
2670
2670
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
2671
2671
|
minVersion: "12.0.0",
|
|
2672
|
-
version: "22.2.
|
|
2672
|
+
version: "22.2.3",
|
|
2673
2673
|
ngImport: i0,
|
|
2674
2674
|
type: UserRoleSelectorComponent,
|
|
2675
2675
|
deps: [],
|
|
@@ -2677,7 +2677,7 @@ var UserRoleSelectorComponent = class UserRoleSelectorComponent {
|
|
|
2677
2677
|
});
|
|
2678
2678
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
2679
2679
|
minVersion: "17.0.0",
|
|
2680
|
-
version: "22.2.
|
|
2680
|
+
version: "22.2.3",
|
|
2681
2681
|
type: UserRoleSelectorComponent,
|
|
2682
2682
|
isStandalone: true,
|
|
2683
2683
|
selector: "flusys-user-role-selector",
|
|
@@ -3165,7 +3165,7 @@ var UserRoleSelectorComponent = class UserRoleSelectorComponent {
|
|
|
3165
3165
|
};
|
|
3166
3166
|
i0.ɵɵngDeclareClassMetadata({
|
|
3167
3167
|
minVersion: "12.0.0",
|
|
3168
|
-
version: "22.2.
|
|
3168
|
+
version: "22.2.3",
|
|
3169
3169
|
ngImport: i0,
|
|
3170
3170
|
type: UserRoleSelectorComponent,
|
|
3171
3171
|
decorators: [{
|
|
@@ -3635,7 +3635,7 @@ var UserActionSelectorComponent = class UserActionSelectorComponent extends Base
|
|
|
3635
3635
|
}
|
|
3636
3636
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
3637
3637
|
minVersion: "12.0.0",
|
|
3638
|
-
version: "22.2.
|
|
3638
|
+
version: "22.2.3",
|
|
3639
3639
|
ngImport: i0,
|
|
3640
3640
|
type: UserActionSelectorComponent,
|
|
3641
3641
|
deps: [],
|
|
@@ -3643,7 +3643,7 @@ var UserActionSelectorComponent = class UserActionSelectorComponent extends Base
|
|
|
3643
3643
|
});
|
|
3644
3644
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
3645
3645
|
minVersion: "17.0.0",
|
|
3646
|
-
version: "22.2.
|
|
3646
|
+
version: "22.2.3",
|
|
3647
3647
|
type: UserActionSelectorComponent,
|
|
3648
3648
|
isStandalone: true,
|
|
3649
3649
|
selector: "flusys-user-action-selector",
|
|
@@ -4254,7 +4254,7 @@ var UserActionSelectorComponent = class UserActionSelectorComponent extends Base
|
|
|
4254
4254
|
};
|
|
4255
4255
|
i0.ɵɵngDeclareClassMetadata({
|
|
4256
4256
|
minVersion: "12.0.0",
|
|
4257
|
-
version: "22.2.
|
|
4257
|
+
version: "22.2.3",
|
|
4258
4258
|
ngImport: i0,
|
|
4259
4259
|
type: UserActionSelectorComponent,
|
|
4260
4260
|
decorators: [{
|
|
@@ -4604,4 +4604,4 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
4604
4604
|
});
|
|
4605
4605
|
export { ActionPermissionLogicService as a, RoleActionSelectorComponent as i, UserRoleSelectorComponent as n, MAX_DROPDOWN_ITEMS as o, CompanyActionSelectorComponent as r, UserActionSelectorComponent as t };
|
|
4606
4606
|
|
|
4607
|
-
//# sourceMappingURL=flusys-ng-iam-user-action-selector.component-
|
|
4607
|
+
//# sourceMappingURL=flusys-ng-iam-user-action-selector.component-BwZD9-jV.mjs.map
|