Skip to content

Commit 620823f

Browse files
committed
listenTo multiple events at once
1 parent 2bceece commit 620823f

File tree

3 files changed

+16
-7
lines changed

3 files changed

+16
-7
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "yieldmachine",
33
"amdName": "yieldmachine",
4-
"version": "0.4.7",
4+
"version": "0.4.9",
55
"description": "Declarative state machines using generator functions",
66
"source": "src/index.ts",
77
"main": "dist/yieldmachine.js",

src/index.test.ts

+9-2
Original file line numberDiff line numberDiff line change
@@ -851,8 +851,11 @@ describe("Key shortcut cond reading event", () => {
851851

852852
describe("Element focus", () => {
853853
function* ButtonFocusListener(el: HTMLElement) {
854-
yield listenTo(el.ownerDocument, "focusin");
855-
yield on("focusin", compound(CheckingActive));
854+
yield listenTo(el, ["blur", "focus"]);
855+
// yield listenTo(el.ownerDocument, "focusin");
856+
// yield on("focusin", compound(CheckingActive));
857+
yield on("focus", compound(CheckingActive));
858+
yield on("blur", compound(CheckingActive));
856859

857860
function* Inactive() {}
858861
function* Active() {}
@@ -889,6 +892,10 @@ describe("Element focus", () => {
889892
expect(machine.current).toEqual("Active");
890893
expect(machine.changeCount).toEqual(6);
891894

895+
button.blur();
896+
expect(machine.current).toEqual("Inactive");
897+
expect(machine.changeCount).toEqual(8);
898+
892899
machine.abort();
893900
button.remove();
894901
input.remove();

src/index.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export interface On {
3838

3939
export interface ListenTo {
4040
type: "listenTo";
41-
eventName: string;
41+
eventNames: Array<string>;
4242
sender: EventTarget
4343
}
4444
export interface Always {
@@ -90,8 +90,8 @@ export function exit(f: ActionBody): ExitAction {
9090
return { type: "exit", f };
9191
}
9292

93-
export function listenTo(sender: EventTarget, eventName: string): ListenTo {
94-
return { type: "listenTo", sender, eventName };
93+
export function listenTo(sender: EventTarget, eventNames: string | Array<string>): ListenTo {
94+
return { type: "listenTo", sender, eventNames: ([] as Array<string>).concat(eventNames) };
9595
}
9696

9797
export function send<Method extends string | symbol, Arguments extends any[]>(target: () => Record<Method, (...args: Arguments) => void>, method: Method, args: Arguments): Send<Method, Arguments> {
@@ -198,7 +198,9 @@ class Handlers {
198198
} else if (value.type === "cond") {
199199
this.alwaysArray.push(value);
200200
} else if (value.type === 'listenTo') {
201-
this.eventsToListenTo.push([value.eventName, value.sender]);
201+
for (const eventName of value.eventNames) {
202+
this.eventsToListenTo.push([eventName, value.sender]);
203+
}
202204
} else if (value.type === 'accumulate') {
203205
this.eventsToAccumulate.push([value.eventName, value.resultKey]);
204206
} else if (value.type === 'readContext') {

0 commit comments

Comments
 (0)