Skip to content

Commit 2755a0b

Browse files
zewa666StrahilKazlachev
authored andcommitted
feat(keyboard): allow to configure keyevent type
when configuring the plugin one can pass the keyEvent as a setting, which accepts 'keyup' and 'keydown'. Ported for v1
1 parent 9416094 commit 2755a0b

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

src/dialog-renderer.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export class DialogRenderer implements Renderer {
8080

8181
public static trackController(dialogController: DialogController): void {
8282
if (!DialogRenderer.dialogControllers.length) {
83-
DOM.addEventListener('keyup', DialogRenderer.keyboardEventHandler, false);
83+
DOM.addEventListener(dialogController.settings.keyEvent || 'keyup', DialogRenderer.keyboardEventHandler, false);
8484
}
8585
DialogRenderer.dialogControllers.push(dialogController);
8686
}
@@ -91,7 +91,11 @@ export class DialogRenderer implements Renderer {
9191
DialogRenderer.dialogControllers.splice(i, 1);
9292
}
9393
if (!DialogRenderer.dialogControllers.length) {
94-
DOM.removeEventListener('keyup', DialogRenderer.keyboardEventHandler, false);
94+
DOM.removeEventListener(
95+
dialogController.settings.keyEvent || 'keyup',
96+
DialogRenderer.keyboardEventHandler,
97+
false
98+
);
9599
}
96100
}
97101

src/dialog-settings.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Container } from 'aurelia-dependency-injection';
22
import { ViewStrategy } from 'aurelia-templating';
33

44
export type ActionKey = 'Escape' | 'Enter';
5+
export type KeyEventType = 'keyup' | 'keydown';
56

67
/**
78
* All available dialog settings.
@@ -52,6 +53,14 @@ export interface DialogSettings {
5253
*/
5354
keyboard?: boolean | ActionKey | ActionKey[];
5455

56+
/**
57+
* Determines which type of keyevent should be used to listen for
58+
* ENTER and ESC keys
59+
*
60+
* Default: keyup
61+
*/
62+
keyEvent?: KeyEventType;
63+
5564
/**
5665
* When set to "true" allows for the dismissal of the dialog by clicking outside of it.
5766
*/

test/unit/dialog-renderer.spec.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,18 @@ describe('DialogRenderer', () => {
209209
expect(DialogRenderer.dialogControllers.length).toBe(2);
210210
done();
211211
});
212+
213+
it('sets ESC key event handler with custom event type', async done => {
214+
spyOn(DOM, 'addEventListener');
215+
const keyEvent = 'keydown';
216+
const first = createRenderer({ keyEvent });
217+
const last = createRenderer();
218+
await show(done, first, last);
219+
expect(DOM.addEventListener).toHaveBeenCalledWith(keyEvent, jasmine.any(Function), false);
220+
expect((DOM.addEventListener as jasmine.Spy).calls.count()).toBe(1);
221+
expect(DialogRenderer.dialogControllers.length).toBe(2);
222+
done();
223+
});
212224
});
213225

214226
describe('on last closed dialog', () => {

0 commit comments

Comments
 (0)