@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
JavaScript
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,
};
}