diff --git a/APP/src/app/features/users/components/edit-user-dialog/edit-user-dialog.component.html b/APP/src/app/features/users/components/edit-user-dialog/edit-user-dialog.component.html new file mode 100644 index 0000000..39fd4d3 --- /dev/null +++ b/APP/src/app/features/users/components/edit-user-dialog/edit-user-dialog.component.html @@ -0,0 +1,37 @@ + +
+ + + + + Required. + Invalid email. + + + + + + + + + + + + + +
+ + +
+ +
+ + + + + +
diff --git a/APP/src/app/features/users/components/edit-user-dialog/edit-user-dialog.component.ts b/APP/src/app/features/users/components/edit-user-dialog/edit-user-dialog.component.ts new file mode 100644 index 0000000..2a20ed0 --- /dev/null +++ b/APP/src/app/features/users/components/edit-user-dialog/edit-user-dialog.component.ts @@ -0,0 +1,51 @@ +import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormBuilder, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms'; +import { DialogsModule } from '@progress/kendo-angular-dialog'; +import { InputsModule } from '@progress/kendo-angular-inputs'; +import { LabelModule } from '@progress/kendo-angular-label'; +import { DropDownsModule } from '@progress/kendo-angular-dropdowns'; +import { ButtonsModule } from '@progress/kendo-angular-buttons'; +import { UserDto, UpdateUserRequest, ALL_ROLES } from '../../models/user.model'; + +@Component({ + selector: 'app-edit-user-dialog', + standalone: true, + imports: [ + CommonModule, ReactiveFormsModule, DialogsModule, + InputsModule, LabelModule, DropDownsModule, ButtonsModule + ], + templateUrl: './edit-user-dialog.component.html', +}) +export class EditUserDialogComponent implements OnInit { + @Input({ required: true }) user!: UserDto; + @Output() saved = new EventEmitter(); + @Output() cancelled = new EventEmitter(); + + form!: FormGroup; + readonly roleOptions: string[] = [...ALL_ROLES]; + readonly langOptions = [ + { text: 'English', value: 'en' }, + { text: '中文', value: 'zh-TW' }, + ]; + + constructor(private fb: FormBuilder) {} + + ngOnInit(): void { + this.form = this.fb.group({ + email: [this.user.email, [Validators.required, Validators.email]], + roles: [this.user.roles, Validators.required], + isActive: [this.user.isActive], + languagePreference: [this.user.languagePreference], + }); + } + + onSubmit(): void { + if (this.form.invalid) { this.form.markAllAsTouched(); return; } + this.saved.emit(this.form.value as UpdateUserRequest); + } + + onCancel(): void { + this.cancelled.emit(); + } +}