{"version":3,"file":"867.e18ffa557e60e3a2.js","mappings":"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","names":["passwordFieldsMustMatch","control","root","parent","password","get","passwordConfirm","value","passwordsMismatch","i0","_r3","ctx_r2","clearForm","ctx_r4","createUser","t_r1","ctx_r0","form","errorTitle$","ToolbarComponent","constructor","store","translocoService","notificationService","this","BehaviorSubject","translate","key","params","lang","validateForm","markAllAsDirty","formErrors","getFormErrors","errors","error","Object","entries","field","text","required","valueNotAllowed","min","max","minLength","maxLength","atLeastOne","fieldValueMismatch","field1","field2","push","output","join","next","setValue","username","markAsPristine","message","sticky","duration","progressBar","dispatch","AdminActions","static","t","i1","i2","i3","core","Xpm","selectors","inputs","decls","vars","consts","template","rf","ctx","ToolbarComponent_ng_container_0_Template","_c0","passwordValidations","length","uppercase","lowercase","number","CreateComponent","router","route","ngZone","eventService","destroy$","Subject","screen","group","CONSTANTS","SCREEN_GROUP","url","ngOnInit","loading$","loading","REQUEST_CREATE_USER","createFormGroup","FormGroup","FormControl","requiredWhen","passwordComplexity","setValidators","messageClose$","pipe","filter","x","id","takeUntil","subscribe","setTimeout","run","navigate","payload","relativeTo","getFormGroup","name","trim","test","ngOnDestroy","unsubscribe","CreateComponent_ng_container_0_Template","routes","path","pathMatch","component","data","breadcrumb","requiredPermissions","PERMISSIONS","canActivate","AuthGuard","PermissionGuard","runGuardsAndResolvers","CreateRoutingModule","oAB","cJS","RouterModule","forChild","CreateModule","CommonModule","SharedModule","ComponentsModule"],"sourceRoot":"webpack:///","sources":["./client/app/util/form/validators/password-fields-must-match.ts","./client/app/admin/users/create/toolbar/toolbar.component.html","./client/app/admin/users/create/toolbar/toolbar.component.ts","./client/app/admin/users/create/create.component.html","./client/app/admin/users/create/create.component.ts","./client/app/admin/users/create/create.form.ts","./client/app/admin/users/create/create-routing.module.ts","./client/app/admin/users/create/create.module.ts"],"sourcesContent":["import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nexport function passwordFieldsMustMatch(control: AbstractControl): ValidationErrors | null {\n if (!control || !control.root || !control.parent) {\n return null;\n }\n\n const password = control.get('password');\n const passwordConfirm = control.get('passwordConfirm');\n\n if (!password || !passwordConfirm) {\n return null;\n }\n\n return password.value === passwordConfirm.value ? null : { passwordsMismatch: true };\n}\n","\n \n
\n \n\n \n
\n\n
\n \n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { TranslocoService } from '@ngneat/transloco';\n\nimport { NotificationService } from '@core/services';\nimport { getFormErrors, markAllAsDirty } from '@util/form';\n\nimport { AdminActions } from '@admin/state';\n\n@Component({\n selector: 'z-toolbar',\n templateUrl: './toolbar.component.html',\n styleUrls: ['./toolbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarComponent {\n errorTitle$ = new BehaviorSubject(null);\n\n @Input() form: FormGroup;\n\n translate = (key: string | string[], params?: Record, lang?: string) =>\n this.translocoService.translate(key, params, lang);\n\n constructor(\n public store: Store,\n private translocoService: TranslocoService,\n private notificationService: NotificationService\n ) {}\n\n validateForm() {\n markAllAsDirty(this.form);\n\n const formErrors = getFormErrors(this.form, 0);\n\n if (formErrors) {\n const errors: string[] = [];\n\n for (const [key, error] of Object.entries(formErrors)) {\n const field = this.translate(`admin.users.create.${key}.label`);\n let text: string;\n\n if (error.required) {\n text = this.translate('core.components.form_status.errors.required');\n }\n\n if (error.valueNotAllowed) {\n text = this.translate('core.components.form_status.errors.value_not_allowed');\n }\n\n if (error.min) {\n text = this.translate('core.components.form_status.errors.min');\n }\n\n if (error.max) {\n text = this.translate('core.components.form_status.errors.max');\n }\n\n if (error.minLength) {\n text = this.translate('core.components.form_status.errors.min_length');\n }\n\n if (error.maxLength) {\n text = this.translate('core.components.form_status.errors.max_length');\n }\n\n if (error.atLeastOne) {\n text = this.translate('core.components.form_status.errors.at_least_one');\n }\n\n if (error.fieldValueMismatch) {\n text = this.translate('core.components.form_status.errors.field_value_mismatch', {\n field1: this.translate('admin.users.create.password.label'),\n field2: this.translate('admin.users.create.password_confirm.label'),\n });\n }\n\n errors.push(`\n \n ${field}\n ${text}\n `);\n }\n\n const output: string = `${this.translate('core.components.form_status.invalid.title')}:\n\n \n \n \n \n ${errors.join('\\n')}\n
${this.translate('core.components.form_status.header.field')}${this.translate('core.components.form_status.header.text')}
`;\n\n this.errorTitle$.next(output);\n } else {\n this.errorTitle$.next(null);\n }\n\n return formErrors;\n }\n\n clearForm() {\n this.form.setValue({\n username: null,\n password: null,\n passwordConfirm: null,\n });\n\n this.form.markAsPristine();\n }\n\n createUser() {\n if (this.validateForm()) {\n this.notificationService.error({\n message: this.translate('admin.users.create.errors.validation'),\n sticky: false,\n duration: 10,\n progressBar: true,\n });\n\n return;\n }\n\n const username = this.form.get('username').value;\n const password = this.form.get('password').value;\n\n this.store.dispatch(AdminActions.CreateUserRequest({ username, password }));\n }\n}\n","\n \n \n \n \n
\n
\n
\n
\n \n
\n
\n
\n\n
\n
\n
\n \n
\n\n
\n \n
\n
\n
\n \n
    \n
  • \n {{ t('admin.users.detail.password.requirement.length') }}\n
  • \n
  • \n {{ t('admin.users.detail.password.requirement.uppercase') }}\n
  • \n
  • \n {{ t('admin.users.detail.password.requirement.lowercase') }}\n
  • \n
  • \n {{ t('admin.users.detail.password.requirement.number') }}\n
  • \n
\n
\n
\n
\n
\n
\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, NgZone, OnDestroy, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { Store } from '@ngrx/store';\nimport { Observable, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { Screen } from '@core/interfaces';\nimport { EventService, NotificationService } from '@core/services';\n\nimport { CONSTANTS } from '@admin/constants';\nimport { AdminActions } from '@admin/state';\n\nimport { createFormGroup } from './create.form';\n\n@Component({\n templateUrl: './create.component.html',\n styleUrls: ['./create.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CreateComponent implements OnInit, OnDestroy {\n destroy$ = new Subject();\n\n form: FormGroup;\n\n loading$: Observable;\n\n screen: Screen = {\n group: CONSTANTS.SCREEN_GROUP,\n route: this.router.url,\n };\n\n constructor(\n private router: Router,\n private route: ActivatedRoute,\n private store: Store,\n private notificationService: NotificationService,\n private ngZone: NgZone,\n private eventService: EventService\n ) {}\n\n ngOnInit() {\n this.store.dispatch(\n AdminActions.CreateUserInitialize({\n screen: this.screen,\n })\n );\n\n this.loading$ = this.eventService.loading(CONSTANTS.REQUEST_CREATE_USER);\n\n this.form = createFormGroup();\n\n this.notificationService.messageClose$\n .pipe(\n filter((x) => x.id === 'user-created'),\n takeUntil(this.destroy$)\n )\n .subscribe((message) => {\n setTimeout(() => {\n this.ngZone.run(() => {\n void this.router.navigate([message.payload.username], { relativeTo: this.route.parent.parent });\n });\n }, 500);\n });\n }\n\n getFormGroup(name: string): FormGroup {\n return this.form.get(name) as FormGroup;\n }\n\n get password() {\n return this.form.get('password');\n }\n\n get passwordValidations() {\n const value = this.password?.value;\n if (!value || value.trim() === '') {\n return null;\n }\n return {\n length: value.length >= 16 && value.length <= 24,\n uppercase: /[A-Z]/.test(value),\n lowercase: /[a-z]/.test(value),\n number: /\\d/.test(value),\n };\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.unsubscribe();\n }\n}\n","import { FormControl, FormGroup } from '@angular/forms';\n\nimport { passwordComplexity, passwordFieldsMustMatch, requiredWhen } from '@util/form/validators';\n\nexport function createFormGroup() {\n const form = new FormGroup({\n username: new FormControl(null, [requiredWhen(true)]),\n password: new FormControl(null, [requiredWhen(true), passwordComplexity()]),\n passwordConfirm: new FormControl(null, [requiredWhen(true)]),\n });\n\n form.setValidators(passwordFieldsMustMatch);\n\n return form;\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { PERMISSIONS } from '@auth/permissions';\nimport { AuthGuard, PermissionGuard } from '@auth/services';\n\nimport { CreateComponent } from './create.component';\n\nconst routes: Routes = [\n {\n path: '',\n pathMatch: 'full',\n component: CreateComponent,\n data: {\n breadcrumb: null,\n requiredPermissions: [PERMISSIONS.WSADMIN],\n },\n canActivate: [AuthGuard, PermissionGuard],\n runGuardsAndResolvers: 'always',\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class CreateRoutingModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ComponentsModule } from '@core/components/components.module';\nimport { SharedModule } from '@core/shared.module';\n\nimport { CreateComponent } from './create.component';\nimport { ToolbarComponent } from './toolbar/toolbar.component';\n\nimport { CreateRoutingModule } from './create-routing.module';\n\nconst components = [CreateComponent, ToolbarComponent];\n\n@NgModule({\n declarations: components,\n imports: [CommonModule, SharedModule, ComponentsModule, CreateRoutingModule],\n})\nexport class CreateModule {}\n"],"x_google_ignoreList":[]}