@tanstack/table-devtools
Version:
Devtools for TanStack Table.
39 lines (37 loc) • 1.22 kB
JavaScript
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 };