Skip to content

Instantly share code, notes, and snippets.

@cowboyd
Last active July 13, 2023 11:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cowboyd/1ed648240a44a5bbfc4ce60c590b098f to your computer and use it in GitHub Desktop.
Save cowboyd/1ed648240a44a5bbfc4ce60c590b098f to your computer and use it in GitHub Desktop.
Create a context-free function that dispatches values to a subscriber context
import { createChannel, run, type Stream } from "./mod.ts";
export function createSignal<T>(): [(event: T) => void, Stream<T, never>] {
let { input, output } = createChannel<T, never>();
let pulse = (event: T) => run(() => input.send(event));
return [pulse, output];
}
export function onclick(element: HTMLElement): Stream<MouseEvent, never> {
let [onClick, receiver] = createSignal<MouseEvent>();
return resource(function* (provide) {
try {
element.addEventlistener("click", onClick);
let subscription = yield* receiver;
yield* provide(subscription);
} finally {
element.removeEventListener("click", onClick);
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment