UNPKG

@solid-primitives/event-bus

Version:

A collection of SolidJS primitives providing various features of a pubsub/event-emitter/event-bus.

31 lines (30 loc) 1.06 kB
import { drop, filterOut, push } from "@solid-primitives/utils/immutable"; import { createSignal } from "solid-js"; import { createEventBus } from "./eventBus.js"; export function createEventStack(config = {}) { const { toValue = (e) => e, length = 0 } = config; const [stack, setValue] = /*#__PURE__*/ createSignal([]); const eventEventBus = createEventBus(); const valueEventBus = createEventBus(); eventEventBus.listen(event => { const value = toValue(event, stack()); setValue(prev => { const list = push(prev, value); return length && list.length > length ? drop(list) : list; }); valueEventBus.emit({ event: value, stack: stack(), remove: () => remove(value), }); }); const remove = value => !!setValue(p => filterOut(p, value)).removed; return { clear: valueEventBus.clear, listen: valueEventBus.listen, emit: eventEventBus.emit, value: stack, setValue, remove, }; }