From f8b530e0a523a0d9ff469ef716838374c395a360 Mon Sep 17 00:00:00 2001 From: Rigel Kent Date: Fri, 4 Dec 2020 15:58:55 +0100 Subject: unify inputs requiring buttons like password inputs --- .../shared-forms/input-toggle-hidden.component.ts | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 client/src/app/shared/shared-forms/input-toggle-hidden.component.ts (limited to 'client/src/app/shared/shared-forms/input-toggle-hidden.component.ts') diff --git a/client/src/app/shared/shared-forms/input-toggle-hidden.component.ts b/client/src/app/shared/shared-forms/input-toggle-hidden.component.ts new file mode 100644 index 000000000..0e974426b --- /dev/null +++ b/client/src/app/shared/shared-forms/input-toggle-hidden.component.ts @@ -0,0 +1,66 @@ +import { Component, forwardRef, Input } from '@angular/core' +import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms' +import { Notifier } from '@app/core' + +@Component({ + selector: 'my-input-toggle-hidden', + templateUrl: './input-toggle-hidden.component.html', + styleUrls: [ './input-toggle-hidden.component.scss' ], + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => InputToggleHiddenComponent), + multi: true + } + ] +}) +export class InputToggleHiddenComponent implements ControlValueAccessor { + @Input() id = Math.random().toString(11).slice(2, 8) // id cannot be left empty or undefined + @Input() value = '' + @Input() autocomplete = 'off' + @Input() placeholder = '' + @Input() withToggle = true + @Input() withCopy = false + @Input() readonly = false + @Input() show = false + + constructor (private notifier: Notifier) { } + + get inputType () { + return this.show + ? 'text' + : 'password' + } + + get toggleTitle () { + return this.show + ? $localize`Hide` + : $localize`Show` + } + + toggle () { + this.show = !this.show + } + + activateCopiedMessage () { + this.notifier.success($localize`Copied`) + } + + propagateChange = (_: any) => { /* empty */ } + + writeValue (value: string) { + this.value = value + } + + registerOnChange (fn: (_: any) => void) { + this.propagateChange = fn + } + + registerOnTouched () { + // Unused + } + + update () { + this.propagateChange(this.value) + } +} -- cgit v1.2.3