// use-logo-soup.ts
import { useRef, useCallback, useEffect } from "preact/hooks";
import { useSyncExternalStore } from "preact/compat";
import { createLogoSoup } from "@sanity-labs/logo-soup";
import type { ProcessOptions, LogoSoupState } from "@sanity-labs/logo-soup";
const SERVER_SNAPSHOT: LogoSoupState = {
status: "idle",
normalizedLogos: [],
error: null,
};
export function useLogoSoup(options: ProcessOptions) {
const engineRef = useRef(createLogoSoup());
const engine = engineRef.current;
const subscribe = useCallback(
(cb: () => void) => engine.subscribe(cb),
[engine],
);
const getSnapshot = useCallback(() => engine.getSnapshot(), [engine]);
const state = useSyncExternalStore(
subscribe,
getSnapshot,
() => SERVER_SNAPSHOT,
);
useEffect(() => {
engine.process(options);
}, [engine, options.logos, options.baseSize, options.scaleFactor]);
useEffect(() => () => engine.destroy(), [engine]);
return state;
}