From 9580ccc92888b1def7cf015e6b17dc81c36e2960 Mon Sep 17 00:00:00 2001 From: rubikscraft Date: Sun, 4 Sep 2022 11:32:51 +0200 Subject: [PATCH] make apikeys editor better --- .../apikey-editor.component.html | 5 ++ .../apikey-editor.component.scss | 6 +++ .../apikey-editor/apikey-editor.component.ts | 51 +++++++++++++++++++ .../apikeys/settings-apikeys.component.html | 8 +-- .../apikeys/settings-apikeys.component.scss | 7 --- .../apikeys/settings-apikeys.component.ts | 12 +---- .../apikeys/settings-apikeys.module.ts | 7 +-- 7 files changed, 71 insertions(+), 25 deletions(-) create mode 100644 frontend/src/app/routes/settings/apikeys/apikey-editor/apikey-editor.component.html create mode 100644 frontend/src/app/routes/settings/apikeys/apikey-editor/apikey-editor.component.scss create mode 100644 frontend/src/app/routes/settings/apikeys/apikey-editor/apikey-editor.component.ts diff --git a/frontend/src/app/routes/settings/apikeys/apikey-editor/apikey-editor.component.html b/frontend/src/app/routes/settings/apikeys/apikey-editor/apikey-editor.component.html new file mode 100644 index 0000000..c62e719 --- /dev/null +++ b/frontend/src/app/routes/settings/apikeys/apikey-editor/apikey-editor.component.html @@ -0,0 +1,5 @@ + + Name + + {{getErrorMessage()}} + diff --git a/frontend/src/app/routes/settings/apikeys/apikey-editor/apikey-editor.component.scss b/frontend/src/app/routes/settings/apikeys/apikey-editor/apikey-editor.component.scss new file mode 100644 index 0000000..8bf7cca --- /dev/null +++ b/frontend/src/app/routes/settings/apikeys/apikey-editor/apikey-editor.component.scss @@ -0,0 +1,6 @@ +.editfield { + margin-top: 1rem; + width: 100%; + margin-right: 1rem; + padding-right: 1rem; +} diff --git a/frontend/src/app/routes/settings/apikeys/apikey-editor/apikey-editor.component.ts b/frontend/src/app/routes/settings/apikeys/apikey-editor/apikey-editor.component.ts new file mode 100644 index 0000000..44bb1be --- /dev/null +++ b/frontend/src/app/routes/settings/apikeys/apikey-editor/apikey-editor.component.ts @@ -0,0 +1,51 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { FormControl, Validators } from '@angular/forms'; +import { Logger } from 'src/app/services/logger/logger.service'; + +@Component({ + selector: 'app-settings-apikey-editor', + templateUrl: './apikey-editor.component.html', + styleUrls: ['./apikey-editor.component.scss'], +}) +export class SettingsApiKeyEditorComponent { + private readonly logger = new Logger(SettingsApiKeyEditorComponent.name); + + @Input() set value(value: string) { + this.field.setValue(value); + } + + @Output('changed') change = new EventEmitter(); + + field = new FormControl('', [ + Validators.required, + Validators.minLength(3), + Validators.maxLength(255), + ]); + + async update(event: Event) { + if (this.field.invalid) { + return; + } + + const value = this.field.value; + if (value === null) return; + + this.change.emit(value); + } + + getErrorMessage() { + if (this.field.hasError('required')) { + return 'You must enter a value'; + } + + if (this.field.hasError('minlength')) { + return 'Minimum length is 3'; + } + + if (this.field.hasError('maxlength')) { + return 'Maximum length is 255'; + } + + return 'Unknown error'; + } +} diff --git a/frontend/src/app/routes/settings/apikeys/settings-apikeys.component.html b/frontend/src/app/routes/settings/apikeys/settings-apikeys.component.html index e6a4d04..27d8eae 100644 --- a/frontend/src/app/routes/settings/apikeys/settings-apikeys.component.html +++ b/frontend/src/app/routes/settings/apikeys/settings-apikeys.component.html @@ -4,10 +4,10 @@ Name - - Name - - + diff --git a/frontend/src/app/routes/settings/apikeys/settings-apikeys.component.scss b/frontend/src/app/routes/settings/apikeys/settings-apikeys.component.scss index b8f6028..9a98485 100644 --- a/frontend/src/app/routes/settings/apikeys/settings-apikeys.component.scss +++ b/frontend/src/app/routes/settings/apikeys/settings-apikeys.component.scss @@ -18,10 +18,3 @@ mat-table { .icon-red { color: #f44336; } - -.editfield { - margin-top: 1rem; - width: 100%; - margin-right: 1rem; - padding-right: 1rem; -} diff --git a/frontend/src/app/routes/settings/apikeys/settings-apikeys.component.ts b/frontend/src/app/routes/settings/apikeys/settings-apikeys.component.ts index cab076e..a22aca3 100644 --- a/frontend/src/app/routes/settings/apikeys/settings-apikeys.component.ts +++ b/frontend/src/app/routes/settings/apikeys/settings-apikeys.component.ts @@ -135,17 +135,7 @@ export class SettingsApiKeysComponent implements OnInit { } } - async updateKeyName(event: Event, apikeyID: string) { - const name = (event.target as HTMLInputElement).value; - - if (name.length < 3) { - this.utilService.showSnackBar( - 'Name must be at least 3 characters long', - SnackBarType.Warning, - ); - return; - } - + async updateKeyName(name: string, apikeyID: string) { const result = await this.apikeysService.updateApiKey(apikeyID, name); if (HasFailed(result)) { diff --git a/frontend/src/app/routes/settings/apikeys/settings-apikeys.module.ts b/frontend/src/app/routes/settings/apikeys/settings-apikeys.module.ts index 1e6e923..09d70d8 100644 --- a/frontend/src/app/routes/settings/apikeys/settings-apikeys.module.ts +++ b/frontend/src/app/routes/settings/apikeys/settings-apikeys.module.ts @@ -1,19 +1,20 @@ import { ClipboardModule } from '@angular/cdk/clipboard'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; -import { MatChipsModule } from '@angular/material/chips'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatPaginatorModule } from '@angular/material/paginator'; import { MatTableModule } from '@angular/material/table'; import { MomentModule } from 'ngx-moment'; import { FabModule } from 'src/app/components/fab/fab.module'; +import { SettingsApiKeyEditorComponent } from './apikey-editor/apikey-editor.component'; import { SettingsApiKeysComponent } from './settings-apikeys.component'; import { SettingsApiKeysRoutingModule } from './settings-apikeys.routing.module'; @NgModule({ - declarations: [SettingsApiKeysComponent], + declarations: [SettingsApiKeysComponent, SettingsApiKeyEditorComponent], imports: [ CommonModule, SettingsApiKeysRoutingModule, @@ -22,9 +23,9 @@ import { SettingsApiKeysRoutingModule } from './settings-apikeys.routing.module' MatTableModule, MatPaginatorModule, MatInputModule, - MatChipsModule, MomentModule, ClipboardModule, + ReactiveFormsModule, FabModule, ], })