From 41af1ba194632a88c38162eec54e963b868b093f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Tue, 24 May 2022 16:29:02 +0300 Subject: [PATCH] Hidden action: press D key --- .../hidden-action.component.html | 2 +- .../hidden-action/hidden-action.component.ts | 41 ++++++++++++++----- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/lib/misc/hidden-action/hidden-action.component.html b/src/lib/misc/hidden-action/hidden-action.component.html index a101778..6aa8b5c 100644 --- a/src/lib/misc/hidden-action/hidden-action.component.html +++ b/src/lib/misc/hidden-action/hidden-action.component.html @@ -1,3 +1,3 @@ -
+
diff --git a/src/lib/misc/hidden-action/hidden-action.component.ts b/src/lib/misc/hidden-action/hidden-action.component.ts index 6d8a68c..76eaba4 100644 --- a/src/lib/misc/hidden-action/hidden-action.component.ts +++ b/src/lib/misc/hidden-action/hidden-action.component.ts @@ -1,4 +1,5 @@ -import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; +import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, Input, Output } from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; @Component({ selector: 'iqser-hidden-action', @@ -9,18 +10,38 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from export class HiddenActionComponent { @Input() requiredClicks = 4; @Output() readonly action = new EventEmitter(); - private _clickCount = 0; - private _clickCountTimeout?: ReturnType; + #dPressed = new BehaviorSubject(false); + #clickCount = 0; + #clickCountTimeout?: ReturnType; - countActions(): void { - this._clickCount += 1; - if (this._clickCount === this.requiredClicks) { - this._clickCount = 0; + @HostListener('window:keydown.D', ['$event']) + onKeydownD() { + this.#dPressed.next(true); + } + + @HostListener('window:keyup.D', ['$event']) + onKeyupD() { + this.#dPressed.next(false); + } + + countActions($event: MouseEvent): void { + if (!this.#dPressed.value) { + this.#clickCount = 0; + clearTimeout(this.#clickCountTimeout); + return; + } + + $event.stopPropagation(); + $event.preventDefault(); + + this.#clickCount += 1; + if (this.#clickCount === this.requiredClicks) { + this.#clickCount = 0; this.action.emit(); } - clearTimeout(this._clickCountTimeout); - this._clickCountTimeout = setTimeout(() => { - this._clickCount = 0; + clearTimeout(this.#clickCountTimeout); + this.#clickCountTimeout = setTimeout(() => { + this.#clickCount = 0; }, 1000); } }