@flusys/ng-auth 9.1.0 → 9.1.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.
Files changed (37) hide show
  1. package/README.md +2 -0
  2. package/fesm2022/flusys-ng-auth-administration-page.component-DmN4KqiR.mjs +146 -0
  3. package/fesm2022/flusys-ng-auth-administration-page.component-DmN4KqiR.mjs.map +1 -0
  4. package/fesm2022/flusys-ng-auth-branch-form.component-Df_sMC2G.mjs +743 -0
  5. package/fesm2022/flusys-ng-auth-branch-form.component-Df_sMC2G.mjs.map +1 -0
  6. package/fesm2022/flusys-ng-auth-branch-list.component-CWat6QWN.mjs +775 -0
  7. package/fesm2022/flusys-ng-auth-branch-list.component-CWat6QWN.mjs.map +1 -0
  8. package/fesm2022/flusys-ng-auth-company-form.component-BvZ4Pn8j.mjs +198 -0
  9. package/fesm2022/flusys-ng-auth-company-form.component-BvZ4Pn8j.mjs.map +1 -0
  10. package/fesm2022/flusys-ng-auth-company-list.component-Corh9AIh.mjs +241 -0
  11. package/fesm2022/flusys-ng-auth-company-list.component-Corh9AIh.mjs.map +1 -0
  12. package/fesm2022/flusys-ng-auth-extension-order.util-2XWSLqii.mjs +6 -0
  13. package/fesm2022/flusys-ng-auth-extension-order.util-2XWSLqii.mjs.map +1 -0
  14. package/fesm2022/flusys-ng-auth-forgot-password-page.component-BRTVZPX6.mjs +384 -0
  15. package/fesm2022/flusys-ng-auth-forgot-password-page.component-BRTVZPX6.mjs.map +1 -0
  16. package/fesm2022/flusys-ng-auth-login-page.component-DQl52Qau.mjs +1074 -0
  17. package/fesm2022/flusys-ng-auth-login-page.component-DQl52Qau.mjs.map +1 -0
  18. package/fesm2022/flusys-ng-auth-profile-page.component-b-8rPEXQ.mjs +1792 -0
  19. package/fesm2022/flusys-ng-auth-profile-page.component-b-8rPEXQ.mjs.map +1 -0
  20. package/fesm2022/flusys-ng-auth-register-page.component-D99y1jiA.mjs +1513 -0
  21. package/fesm2022/flusys-ng-auth-register-page.component-D99y1jiA.mjs.map +1 -0
  22. package/fesm2022/flusys-ng-auth-reset-password-page.component-C0tN_AW1.mjs +538 -0
  23. package/fesm2022/flusys-ng-auth-reset-password-page.component-C0tN_AW1.mjs.map +1 -0
  24. package/fesm2022/flusys-ng-auth-social-callback-page.component-gTD7_LJY.mjs +217 -0
  25. package/fesm2022/flusys-ng-auth-social-callback-page.component-gTD7_LJY.mjs.map +1 -0
  26. package/fesm2022/flusys-ng-auth-social-config-page.component-DpGmcb9n.mjs +541 -0
  27. package/fesm2022/flusys-ng-auth-social-config-page.component-DpGmcb9n.mjs.map +1 -0
  28. package/fesm2022/flusys-ng-auth-user-form.component-CM9UYc0q.mjs +1171 -0
  29. package/fesm2022/flusys-ng-auth-user-form.component-CM9UYc0q.mjs.map +1 -0
  30. package/fesm2022/flusys-ng-auth-user-list.component-Bew7gz-H.mjs +1046 -0
  31. package/fesm2022/flusys-ng-auth-user-list.component-Bew7gz-H.mjs.map +1 -0
  32. package/fesm2022/flusys-ng-auth-verify-email-page.component-DB9iKvt3.mjs +545 -0
  33. package/fesm2022/flusys-ng-auth-verify-email-page.component-DB9iKvt3.mjs.map +1 -0
  34. package/fesm2022/flusys-ng-auth.mjs +3030 -10735
  35. package/fesm2022/flusys-ng-auth.mjs.map +1 -1
  36. package/package.json +5 -5
  37. package/types/flusys-ng-auth.d.ts +978 -1558
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flusys-ng-auth-user-form.component-CM9UYc0q.mjs","names":[],"sources":["../../../projects/ng-auth/pages/users/user-form.component.ts"],"sourcesContent":["import {\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n Injector,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n email as emailValidator,\n form,\n FormField,\n required,\n} from '@angular/forms/signals';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { APP_CONFIG, isCompanyFeatureEnabled } from '@flusys/ng-core';\nimport {\n TranslatePipe,\n TranslateService,\n} from '@flusys/ng-shared';\nimport {\n CardComponent,\n CheckboxComponent,\n FButtonDirective,\n InputTextDirective,\n MessageService,\n PasswordComponent,\n SelectComponent,\n SkeletonComponent,\n TextareaDirective,\n UiIconComponent,\n} from '@flusys/ng-ui';\nimport { finalize, firstValueFrom } from 'rxjs';\nimport {\n ICreateUserRequest,\n IUpdateUserRequest,\n IUser,\n} from '../../interfaces/user.interface';\nimport {\n AUTH_USER_FORM_EXTENSION,\n IUserFormExtraField,\n IUserFormFieldTemplateContext,\n USER_FORM_FIELD_CONTEXT,\n} from '../../providers/auth-extension.providers';\nimport { sortByOrder } from '../../providers/extension-order.util';\nimport { AuthStateService } from '../../services/auth-state.service';\nimport { PasswordPolicyService } from '../../services/password-policy.service';\nimport { UserApiService } from '../../services/user-api.service';\nimport { UserPermissionApiService } from '../../services/user-permission-api.service';\n\ninterface IUserFormModel {\n name: string;\n email: string;\n password: string;\n phone: string;\n isActive: boolean;\n emailVerified: boolean;\n}\n\n@Component({\n selector: 'lib-user-form',\n imports: [\n CardComponent,\n CheckboxComponent,\n FButtonDirective,\n InputTextDirective,\n PasswordComponent,\n SelectComponent,\n SkeletonComponent,\n TextareaDirective,\n UiIconComponent,\n FormsModule,\n NgComponentOutlet,\n NgTemplateOutlet,\n FormField,\n TranslatePipe,\n ],\n template: `\n <f-card>\n <ng-template #header>\n <div class=\"flex justify-between items-center p-4\">\n <h2 class=\"text-xl font-semibold m-0\">\n {{\n isEditMode()\n ? ('administrative.user.edit' | translate)\n : ('administrative.user.new' | translate)\n }}\n </h2>\n </div>\n </ng-template>\n\n <form\n (ngSubmit)=\"onSubmit()\"\n class=\"grid grid-cols-1 md:grid-cols-2 gap-4\"\n >\n <div class=\"flex flex-col gap-2\">\n <label for=\"name\" class=\"font-medium\"\n >{{ 'administrative.user.name' | translate }} *</label\n >\n <input\n fInputText\n id=\"name\"\n [formField]=\"formTree.name\"\n [placeholder]=\"'administrative.user.name.placeholder' | translate\"\n />\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label for=\"email\" class=\"font-medium\"\n >{{ 'administrative.email.label' | translate }} *</label\n >\n <input\n fInputText\n id=\"email\"\n type=\"email\"\n [formField]=\"formTree.email\"\n [placeholder]=\"'auth.email.placeholder' | translate\"\n />\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label for=\"password\" class=\"font-medium\">\n {{ 'administrative.user.password' | translate }}\n {{\n isEditMode()\n ? ('administrative.user.password.optional' | translate)\n : '*'\n }}\n </label>\n <f-password\n [inputId]=\"'password'\"\n [formField]=\"formTree.password\"\n [placeholder]=\"\n 'administrative.user.password.placeholder' | translate\n \"\n autocomplete=\"new-password\"\n />\n @if (passwordError()) {\n <small class=\"text-danger\">{{ passwordError() }}</small>\n }\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label for=\"phone\" class=\"font-medium\">{{\n 'administrative.phone.label' | translate\n }}</label>\n <input\n fInputText\n id=\"phone\"\n [formField]=\"formTree.phone\"\n [placeholder]=\"'auth.phone.placeholder' | translate\"\n />\n </div>\n\n @if (hasExtraFields()) {\n <div class=\"md:col-span-2 border-t border-surface pt-4 mt-2\">\n <div class=\"text-sm font-medium text-muted-color mb-4\">\n <ui-icon name=\"sliders-h\" class=\"mr-2\"></ui-icon\n >{{ 'profile.additional.info' | translate }}\n </div>\n @if (isLoadingExtraFields()) {\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <f-skeleton height=\"2.5rem\" />\n <f-skeleton height=\"2.5rem\" />\n </div>\n } @else {\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n @for (field of extraFields(); track field.key) {\n <div class=\"flex flex-col gap-2\">\n <label [for]=\"field.key\" class=\"font-medium text-color\">\n {{ field.labelKey | translate: null : field.label\n }}{{ field.required ? ' *' : '' }}\n </label>\n @if (field.component) {\n <ng-container\n [ngComponentOutlet]=\"field.component\"\n [ngComponentOutletInjector]=\"getFieldInjector(field)\"\n />\n } @else if (field.template) {\n <ng-container\n [ngTemplateOutlet]=\"field.template\"\n [ngTemplateOutletContext]=\"\n getFieldTemplateContext(field)\n \"\n />\n } @else {\n @switch (field.type) {\n @case ('text') {\n <input\n fInputText\n [id]=\"field.key\"\n [placeholder]=\"\n field.placeholderKey\n | translate: null : field.placeholder ?? ''\n \"\n [value]=\"getExtraFieldValue(field.key) ?? ''\"\n (input)=\"\n updateExtraField(\n field.key,\n $any($event.target).value\n )\n \"\n class=\"w-full\"\n />\n }\n @case ('number') {\n <input\n fInputText\n type=\"number\"\n [id]=\"field.key\"\n [placeholder]=\"\n field.placeholderKey\n | translate: null : field.placeholder ?? ''\n \"\n [value]=\"getExtraFieldValue(field.key) ?? ''\"\n (input)=\"\n updateExtraField(\n field.key,\n $any($event.target).valueAsNumber\n )\n \"\n class=\"w-full\"\n />\n }\n @case ('textarea') {\n <textarea\n fTextarea\n [id]=\"field.key\"\n [placeholder]=\"\n field.placeholderKey\n | translate: null : field.placeholder ?? ''\n \"\n [value]=\"getExtraFieldValue(field.key) ?? ''\"\n (input)=\"\n updateExtraField(\n field.key,\n $any($event.target).value\n )\n \"\n class=\"w-full\"\n rows=\"3\"\n ></textarea>\n }\n @case ('select') {\n <f-select\n [id]=\"field.key\"\n class=\"w-full\"\n [options]=\"field.options ?? []\"\n optionValue=\"value\"\n [ngModel]=\"getExtraFieldValue(field.key) ?? ''\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"\n updateExtraField(field.key, $event)\n \"\n [placeholder]=\"\n field.placeholderKey\n | translate\n : null\n : field.placeholder ??\n ('shared.select' | translate)\n \"\n >\n <ng-template #item let-opt>{{\n opt.labelKey | translate: null : opt.label\n }}</ng-template>\n <ng-template #selectedItem let-opt>{{\n opt.labelKey | translate: null : opt.label\n }}</ng-template>\n </f-select>\n }\n @case ('checkbox') {\n <f-checkbox\n [inputId]=\"field.key\"\n [checked]=\"\n $any(getExtraFieldValue(field.key) ?? false)\n \"\n (onChange)=\"\n updateExtraField(field.key, $event.checked)\n \"\n [label]=\"\n field.placeholderKey\n | translate\n : null\n : field.placeholder ??\n (field.labelKey\n | translate: null : field.label)\n \"\n />\n }\n @case ('date') {\n <input\n fInputText\n type=\"date\"\n [id]=\"field.key\"\n [value]=\"getExtraFieldValue(field.key) ?? ''\"\n (input)=\"\n updateExtraField(\n field.key,\n $any($event.target).value\n )\n \"\n class=\"w-full\"\n />\n }\n }\n }\n </div>\n }\n </div>\n @if (extraFieldsValidationError()) {\n <small class=\"text-danger block mt-2\">{{\n extraFieldsValidationError()\n }}</small>\n }\n }\n </div>\n }\n\n <div class=\"flex items-center gap-6 md:col-span-2 pt-4\">\n <f-checkbox\n [formField]=\"formTree.isActive\"\n [label]=\"'shared.active' | translate\"\n />\n <f-checkbox\n [formField]=\"formTree.emailVerified\"\n [label]=\"'administrative.user.email.verified' | translate\"\n />\n </div>\n\n @if (companyFeatureEnabled() && !isEditMode()) {\n <div\n class=\"md:col-span-2 p-3 bg-primary/10 rounded-lg border border-primary/20\"\n >\n <div class=\"flex items-center gap-2 text-primary\">\n <ui-icon name=\"info-circle\"></ui-icon>\n <span class=\"text-sm\">\n {{ 'administrative.user.auto.assign.to' | translate }}\n <strong>{{ currentCompanyName() }}</strong>\n @if (currentBranchName()) {\n / <strong>{{ currentBranchName() }}</strong>\n }\n </span>\n </div>\n </div>\n }\n\n <div class=\"flex justify-end gap-4 md:col-span-2 pt-4\">\n <button\n fButton\n type=\"button\"\n severity=\"secondary\"\n [outlined]=\"true\"\n (click)=\"onCancel()\"\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 </f-card>\n `,\n})\nexport class UserFormComponent {\n private readonly destroyRef = inject(DestroyRef);\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n private readonly appConfig = inject(APP_CONFIG);\n private readonly messageService = inject(MessageService);\n private readonly userService = inject(UserApiService);\n private readonly permissionService = inject(UserPermissionApiService);\n private readonly authState = inject(AuthStateService);\n private readonly passwordPolicy = inject(PasswordPolicyService);\n private readonly translateAdapter = inject(TranslateService, {\n optional: true,\n });\n private readonly userFormExtension = inject(AUTH_USER_FORM_EXTENSION, {\n optional: true,\n });\n private readonly parentInjector = inject(Injector);\n\n private translate(\n key: string,\n vars?: Record<string, unknown>,\n ): string {\n return this.translateAdapter?.translate(key, vars) ?? key;\n }\n\n private readonly routeParams = toSignal(this.route.paramMap);\n private userLoadTriggered = false;\n\n readonly isLoading = signal(false);\n readonly existingUser = signal<IUser | null>(null);\n readonly isEditMode = computed(() => !!this.existingUser());\n readonly companyFeatureEnabled = computed(() =>\n isCompanyFeatureEnabled(this.appConfig),\n );\n readonly currentCompanyName = computed(() => this.authState.companyName());\n readonly currentBranchName = computed(() => this.authState.branchName());\n\n readonly formModel = signal<IUserFormModel>({\n name: '',\n email: '',\n password: '',\n phone: '',\n isActive: true,\n emailVerified: false,\n });\n\n readonly formTree = form(this.formModel, (f) => {\n required(f.name, {\n message: this.translate('shared.name.required'),\n });\n required(f.email, {\n message: this.translate('auth.validation.email.required'),\n });\n emailValidator(f.email, {\n message: this.translate('shared.invalid.email'),\n });\n });\n\n readonly isLoadingExtraFields = signal(false);\n readonly extraFieldsModel = signal<Record<string, unknown>>({});\n readonly originalExtraFieldsModel = signal<Record<string, unknown>>({});\n\n readonly extraFields = computed<IUserFormExtraField[]>(() => {\n if (!this.userFormExtension?.getExtraFields) return [];\n return sortByOrder(this.userFormExtension.getExtraFields());\n });\n\n readonly hasExtraFields = computed(() => this.extraFields().length > 0);\n\n readonly extraFieldsValidationError = computed(() => {\n if (!this.userFormExtension?.validateExtraFields) return null;\n return this.userFormExtension.validateExtraFields(this.extraFieldsModel());\n });\n\n readonly isExtraFieldsDirty = computed(() => {\n const current = this.extraFieldsModel();\n const original = this.originalExtraFieldsModel();\n return JSON.stringify(current) !== JSON.stringify(original);\n });\n\n updateExtraField(key: string, value: unknown): void {\n this.extraFieldsModel.update((model) => ({ ...model, [key]: value }));\n }\n\n getExtraFieldValue(key: string): unknown {\n return this.extraFieldsModel()[key];\n }\n\n getFieldTemplateContext(\n field: IUserFormExtraField,\n ): IUserFormFieldTemplateContext {\n return {\n field,\n value: this.extraFieldsModel()[field.key],\n updateValue: (value: unknown) => this.updateExtraField(field.key, value),\n };\n }\n\n private readonly fieldInjectors = new Map<\n string,\n { injector: Injector; setField: (field: IUserFormExtraField) => void }\n >();\n\n getFieldInjector(field: IUserFormExtraField): Injector {\n const cached = this.fieldInjectors.get(field.key);\n if (cached) {\n cached.setField(field);\n return cached.injector;\n }\n\n let currentField = field;\n const extraFieldsModel = this.extraFieldsModel;\n const context: IUserFormFieldTemplateContext = {\n get field() {\n return currentField;\n },\n get value() {\n return extraFieldsModel()[currentField.key];\n },\n updateValue: (value: unknown) =>\n this.updateExtraField(currentField.key, value),\n };\n\n const injector = Injector.create({\n providers: [{ provide: USER_FORM_FIELD_CONTEXT, useValue: context }],\n parent: field.injector ?? this.parentInjector,\n });\n this.fieldInjectors.set(field.key, {\n injector,\n setField: (next) => (currentField = next),\n });\n return injector;\n }\n\n readonly passwordError = computed(() =>\n this.passwordPolicy.validate(this.formModel().password),\n );\n\n readonly isFormValid = computed(() => {\n const model = this.formModel();\n const isEdit = this.isEditMode();\n const nameValid = model.name.trim().length > 0;\n const emailValid = model.email.includes('@');\n\n const passwordValid = model.password ? !this.passwordError() : isEdit;\n\n return nameValid && emailValid && passwordValid;\n });\n\n constructor() {\n effect(() => {\n const params = this.routeParams();\n if (!params || this.userLoadTriggered) return;\n\n this.userLoadTriggered = true;\n const id = params.get('id');\n if (id && id !== 'new') {\n this.loadUser(id);\n }\n });\n }\n\n async loadUser(id: string): Promise<void> {\n this.isLoading.set(true);\n try {\n const response = await this.userService.findById(id);\n if (response.success && response.data) {\n this.existingUser.set(response.data);\n this.formModel.set(this.toFormModel(response.data));\n this.loadExtraFields(id);\n }\n } catch {\n this.router.navigate(['/administration/users']);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n private loadExtraFields(userId: string): void {\n if (!this.userFormExtension?.getExtraFieldValues) return;\n\n this.isLoadingExtraFields.set(true);\n this.userFormExtension\n .getExtraFieldValues(userId)\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n finalize(() => this.isLoadingExtraFields.set(false)),\n )\n .subscribe({\n next: (values) => {\n this.extraFieldsModel.set(values as Record<string, unknown>);\n this.originalExtraFieldsModel.set(values as Record<string, unknown>);\n },\n error: () => {\n const defaults: Record<string, unknown> = {};\n for (const field of this.extraFields()) {\n if (field.key) defaults[field.key] = undefined;\n }\n this.extraFieldsModel.set(defaults);\n this.originalExtraFieldsModel.set(defaults);\n },\n });\n }\n\n private toFormModel(user: IUser): IUserFormModel {\n return {\n name: user.name,\n email: user.email,\n password: '',\n phone: user.phone || '',\n isActive: user.isActive,\n emailVerified: user.emailVerified,\n };\n }\n\n onSubmit(): void {\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 if (this.isEditMode() && this.existingUser()) {\n this.updateUser();\n } else {\n this.createUser();\n }\n }\n\n private async updateUser(): Promise<void> {\n const model = this.formModel();\n const userId = this.existingUser()!.id;\n const updateData: IUpdateUserRequest = {\n id: userId,\n name: model.name,\n email: model.email,\n phone: model.phone || undefined,\n isActive: model.isActive,\n emailVerified: model.emailVerified,\n };\n\n if (model.password) {\n updateData.password = model.password;\n }\n\n try {\n const [userResponse] = await Promise.all([\n this.userService.update(updateData),\n this.isExtraFieldsDirty() &&\n this.userFormExtension?.saveExtraFieldValues\n ? firstValueFrom(\n this.userFormExtension.saveExtraFieldValues(\n userId,\n this.extraFieldsModel(),\n ),\n )\n : Promise.resolve(undefined),\n ]);\n this.onSaveSuccess(\n userResponse.messageKey\n ? this.translate(\n userResponse.messageKey,\n userResponse.messageVariables,\n )\n : userResponse.message,\n );\n } finally {\n this.isLoading.set(false);\n }\n }\n\n private async createUser(): Promise<void> {\n const model = this.formModel();\n const createData: ICreateUserRequest = {\n name: model.name,\n email: model.email,\n password: model.password,\n phone: model.phone || undefined,\n isActive: model.isActive,\n emailVerified: model.emailVerified,\n };\n\n try {\n const response = await this.userService.insert(createData);\n if (response.success && response.data) {\n const userId = response.data.id;\n if (this.companyFeatureEnabled()) {\n this.assignUserToCompanyAndBranch(userId);\n }\n this.saveExtraFieldsForNewUser(userId);\n }\n this.onSaveSuccess(\n response.messageKey\n ? this.translate(\n response.messageKey,\n response.messageVariables,\n )\n : response.message,\n );\n } finally {\n this.isLoading.set(false);\n }\n }\n\n private saveExtraFieldsForNewUser(userId: string): void {\n const extraFields = this.extraFieldsModel();\n const hasExtraData =\n Object.keys(extraFields).length > 0 &&\n Object.values(extraFields).some((v) => v !== undefined && v !== '');\n\n if (!hasExtraData || !this.userFormExtension?.saveExtraFieldValues) return;\n\n this.userFormExtension\n .saveExtraFieldValues(userId, extraFields)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({ error: () => {} });\n }\n\n private onSaveSuccess(message: string): void {\n this.messageService.add({\n severity: 'success',\n summary: this.translate('shared.success'),\n detail: message,\n });\n this.router.navigate(['/administration/users']);\n }\n\n private assignUserToCompanyAndBranch(userId: string): void {\n const company = this.authState.company();\n const branch = this.authState.branch();\n\n if (!company) return;\n\n this.permissionService\n .assignUserToCompany(userId, company.id)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => {\n if (branch) {\n this.permissionService\n .assignUserToBranch(userId, branch.id)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({ error: () => {} });\n }\n },\n error: () => {},\n });\n }\n\n onCancel(): void {\n this.router.navigate(['/administration/users']);\n }\n}\n"],"mappings":"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"}