signal-chain-solid
Version:
Signal-Chain interface for SolidJS
22 lines (21 loc) • 746 B
JavaScript
import { createSignal, onCleanup, createEffect } from 'solid-js';
import $ from 'signal-chain';
import { execute } from 'signal-chain';
export const createSolid = (listen1, ...args) => {
const listener = $.chain(listen1, ...args);
const [solidSignal, setSolidSignal] = createSignal(undefined, { equals: false });
const context = {};
const status = { is: 'sync' };
const cleanup = listener((value) => {
setSolidSignal(() => value);
}, undefined, context, status);
onCleanup(() => execute(cleanup, true));
return solidSignal;
};
export const listenSolid = (signal) => {
const base = $.primitive.create(signal());
createEffect(() => {
base.value = signal();
});
return base.listen;
};