import { useLexicalComposerContext } from "./LexicalComposerContext";
import { createEffect, createMemo, createSignal, onCleanup, } from "solid-js";
/**
 * Shortcut to Lexical subscriptions when values are used for render.
 * @param subscription - The function to create the {@link LexicalSubscription}. This function's identity must be stable (e.g. defined at module scope or with useCallback).
 */
export function useLexicalSubscription(subscription) {
    const [editor] = useLexicalComposerContext();
    const initializedSubscription = createMemo(() => subscription(editor));
    const [value, setValue] = createSignal(initializedSubscription().initialValueFn());
    const valueRef = { current: value() };
    createEffect(() => {
        const { initialValueFn, subscribe } = initializedSubscription();
        const currentValue = initialValueFn();
        if (valueRef.current !== currentValue) {
            valueRef.current = currentValue;
            setValue(() => currentValue);
        }
        onCleanup(subscribe((newValue) => {
            valueRef.current = newValue;
            setValue(() => newValue);
        }));
    });
    return value;
}
