UNPKG

@tanstack/table-devtools

Version:

Devtools for TanStack Table.

39 lines (37 loc) 1.22 kB
import { scheduleDevtoolsUpdate } from "./devtoolsUpdateScheduler.js"; import { createEffect, createSignal, onCleanup } from "solid-js"; //#region src/useTableStore.ts /** * Subscribes to a table store and returns a reactive signal. * Handles both function and `{ unsubscribe }` subscription results. */ function useTableStore(storeAccessor, selector = (s) => s, options) { const initialStore = storeAccessor(); const [signal, setSignal] = createSignal(initialStore ? selector(initialStore.get()) : void 0, { equals: options?.equals }); createEffect(() => { const store = storeAccessor(); let cancelPendingUpdate; if (!store) { setSignal(() => void 0); return; } setSignal(() => selector(store.get())); let latestValue; const subscription = store.subscribe((snapshot) => { latestValue = selector(snapshot); if (cancelPendingUpdate) return; cancelPendingUpdate = scheduleDevtoolsUpdate(() => { cancelPendingUpdate = void 0; setSignal(() => latestValue); }); }); onCleanup(() => { cancelPendingUpdate?.(); if (typeof subscription === "function") subscription(); else subscription.unsubscribe(); }); }); return signal; } //#endregion export { useTableStore };