UNPKG

@preact-signals/query

Version:

A reactive utility for React/Preact that simplifies the handling of data fetching and state management. Powered by Preact Signals, it provides hooks and functions to create reactive resources and manage their state seamlessly.

43 lines 1.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useRefBasedOptions = exports.wrapFunctionsInUntracked = exports.wrapWithUntracked = exports.EMPTY_ARRAY = exports.EMPTY_OBJECT = void 0; const utils_1 = require("@preact-signals/utils"); const unified_signals_1 = require("@preact-signals/unified-signals"); const react_1 = require("react"); exports.EMPTY_OBJECT = {}; exports.EMPTY_ARRAY = []; const wrapHandler = { apply(target, thisArg, args) { return (0, utils_1.untracked)(() => target.apply(thisArg, args)); }, }; const wrapWithUntracked = (fn) => new Proxy(fn, wrapHandler); exports.wrapWithUntracked = wrapWithUntracked; const wrapFunctionsInUntracked = (obj) => { for (const key in obj) { if (typeof obj[key] === "function") { obj[key] = (0, exports.wrapWithUntracked)(obj[key]); } } return obj; }; exports.wrapFunctionsInUntracked = wrapFunctionsInUntracked; const defaultExecuteOptions = true; const useRefBasedOptions = (options) => { const optionsRef = (0, react_1.useRef)(options); optionsRef.current = options; const unstableCallbackButReferencesLatest = (0, react_1.useCallback)(() => optionsRef.current(), [options]); const needToChangeOptionOnNextRerender = (0, react_1.useRef)(true); const sig = (0, unified_signals_1.useSignal)(unstableCallbackButReferencesLatest); if (needToChangeOptionOnNextRerender.current) { sig.value = unstableCallbackButReferencesLatest; } const computed = (0, unified_signals_1.useComputed)(() => sig.value()); (0, unified_signals_1.useSignalEffect)(() => { needToChangeOptionOnNextRerender.current = computed.value.executeOptionsOnReferenceChange ?? defaultExecuteOptions; }); return computed; }; exports.useRefBasedOptions = useRefBasedOptions; //# sourceMappingURL=utils.js.map