UNPKG

@legendapp/state

Version:
43 lines (39 loc) 1.65 kB
'use strict'; var state = require('@legendapp/state'); var React = require('react'); function overrideHooks(refObs) { // @ts-expect-error Types don't match React's expected types React.useState = function useState(initialState) { var _a; const obs = (_a = refObs.current) !== null && _a !== void 0 ? _a : (refObs.current = state.observable(state.isFunction(initialState) ? initialState() : initialState)); return [obs.get(), obs.set]; }; // @ts-expect-error Types don't match React's expected types React.useReducer = function useReducer(reducer, initializerArg, initializer) { var _a; const obs = (_a = refObs.current) !== null && _a !== void 0 ? _a : (refObs.current = state.observable(initializerArg !== undefined && state.isFunction(initializerArg) ? initializer(initializerArg) : initializerArg)); const dispatch = (action) => { obs.set(reducer(obs.get(), action)); }; return [obs, dispatch]; }; } function createObservableHook(fn) { const _useState = React.useState; const _useReducer = React.useReducer; return function (...args) { const refObs = React.useRef(); // First override the built-in hooks to create/update observables overrideHooks(refObs); // Then call the original hook fn(...args); // And reset back to the built-in hooks React.useState = _useState; React.useReducer = _useReducer; return refObs.current; }; } exports.createObservableHook = createObservableHook; //# sourceMappingURL=createObservableHook.js.map