diff --git a/jest.config.js b/jest.config.ts similarity index 94% rename from jest.config.js rename to jest.config.ts index e4caf70..df9f67f 100644 --- a/jest.config.js +++ b/jest.config.ts @@ -1,4 +1,5 @@ -module.exports = { +/* eslint-disable */ +export default { displayName: 'common-ui', preset: '../../jest.preset.js', setupFilesAfterEnv: ['/src/test-setup.ts'], 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); } } diff --git a/src/lib/utils/functions.ts b/src/lib/utils/functions.ts index 251a727..1f24cd8 100644 --- a/src/lib/utils/functions.ts +++ b/src/lib/utils/functions.ts @@ -113,3 +113,20 @@ export function deepDiffObj(base: Record, object: Record